> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8a08bda2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 创建一个 ClickHouse 表，包含 PostgreSQL 表的初始转储，并启动复制过程。

# MaterializedPostgreSQL 表引擎

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Not supported in ClickHouse Cloud
        </div>;
};

export const ExperimentalBadge = () => {
  return <div className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            Experimental feature. <u><a href="/docs/beta-and-experimental-features#experimental-features">Learn more.</a></u>
        </div>;
};

<Note>
  建议 ClickHouse Cloud 用户使用 [ClickPipes](/zh/integrations/clickpipes/home) 将 PostgreSQL 复制到 ClickHouse。它原生支持 PostgreSQL 的高性能 CDC (变更数据捕获) 。
</Note>

使用 PostgreSQL 表的初始数据转储创建 ClickHouse 表，并启动复制过程；也就是说，它会执行一个后台作业，将远程 PostgreSQL database 中该 PostgreSQL 表发生的新变更同步过来。

<Note>
  此表引擎为 Experimental。要使用它，请在配置文件中将 `allow_experimental_materialized_postgresql_table` 设为 1，或使用 `SET` 命令：

  ```sql theme={null}
  SET allow_experimental_materialized_postgresql_table=1
  ```
</Note>

如果需要复制多个表，强烈建议使用 [MaterializedPostgreSQL](/zh/reference/engines/database-engines/materialized-postgresql) 数据库引擎，而不是此表引擎，并使用 `materialized_postgresql_tables_list` setting 指定要复制的表 (后续还将支持添加 database `schema`) 。这样在 CPU、连接数以及远程 PostgreSQL database 内部的 replication slots 方面都会更优。

<div id="creating-a-table">
  ## 创建表
</div>

```sql theme={null}
CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_table', 'postgres_user', 'postgres_password')
PRIMARY KEY key;
```

**引擎参数**

* `host:port` — PostgreSQL 服务器地址。
* `database` — 远程数据库名称。
* `table` — 远程表名。
* `user` — PostgreSQL 用户。
* `password` — 用户密码。

<div id="requirements">
  ## 要求
</div>

1. 在 PostgreSQL 配置文件中，[wal\_level](https://www.postgresql.org/docs/current/runtime-config-wal.html) 的值必须为 `logical`，且 `max_replication_slots` 参数的值必须至少为 `2`。

2. 使用 `MaterializedPostgreSQL` 引擎的表必须具有主键，并且该主键必须与 PostgreSQL 表的副本标识索引 (默认情况下为主键) 一致 (参见[副本标识索引的详细信息](/zh/reference/engines/database-engines/materialized-postgresql#requirements)) 。

3. 仅允许使用 [Atomic](https://en.wikipedia.org/wiki/Atomicity_\(database_systems\)) 数据库。

4. `MaterializedPostgreSQL` 表引擎仅适用于 PostgreSQL 11 及以上版本，因为其实现依赖 PostgreSQL 的 [pg\_replication\_slot\_advance](https://pgpedia.info/p/pg_replication_slot_advance.html) 函数。

<div id="virtual-columns">
  ## 虚拟列
</div>

* `_version` — 事务计数器。类型：[UInt64](/zh/reference/data-types/int-uint)。

* `_sign` — 删除标记。类型：[Int8](/zh/reference/data-types/int-uint)。可能的值：
  * `1` — 行未删除，
  * `-1` — 行已删除。

创建表时无需添加这些列。它们在 `SELECT` 查询中始终可用。
`_version` 列等于 `WAL` 中的 `LSN` 位置，因此可用于检查复制的最新状态。

```sql theme={null}
CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_replica', 'postgres_user', 'postgres_password')
PRIMARY KEY key;

SELECT key, value, _version FROM postgresql_db.postgresql_replica;
```

<Note>
  不支持复制 [**TOAST**](https://www.postgresql.org/docs/9.5/storage-toast.html) 的值。将使用该数据类型的默认值。
</Note>
