PostgreSQL

    表结构可以与 PostgreSQL 源表结构不同:

    • 列名应与 PostgreSQL 源表中的列名相同,但您可以按任何顺序使用其中的一些列。
    • 列类型可能与源表中的列类型不同。 ClickHouse尝试将数值映射 到ClickHouse的数据类型。
    • 设置 external_table_functions_use_nulls 来定义如何处理 Nullable 列. 默认值是 1, 当设置为 0 时 - 表函数将不会使用 nullable 列,而是插入默认值来代替 null. 这同样适用于数组数据类型中的 null 值.

    引擎参数

    • host:port — PostgreSQL 服务器地址.
    • database — 数据库名称.
    • table — 表名称.
    • user — PostgreSQL 用户.
    • password — 用户密码.
    • schema — Non-default table schema. 可选.

    在 PostgreSQL 上的 SELECT 查询以 COPY (SELECT ...) TO STDOUT 的方式在只读 PostgreSQL 事务中运行,每次 SELECT 查询后提交。

    简单的 WHERE 子句,如=!=>>=<<=,和是在PostgreSQL 服务器上执行。

    在 PostgreSQL 上的 INSERT 查询以 COPY "table_name" (field1, field2, ... fieldN) FROM STDIN 的方式在 PostgreSQL 事务中运行,每条 INSERT 语句后自动提交。

    PostgreSQL 的 Array 类型会被转换为 ClickHouse 数组。

    Note

    要小心 - 一个在 PostgreSQL 中的数组数据,像type_name[]这样创建,可以在同一列的不同表行中包含不同维度的多维数组。但是在 ClickHouse 中,只允许在同一列的所有表行中包含相同维数的多维数组。

    在下面的例子中,副本example01-1有最高的优先级。

    1. <postgresql>
    2. <user>clickhouse</user>
    3. <password>qwerty</password>
    4. <replica>
    5. <host>example01-1</host>
    6. <priority>1</priority>
    7. </replica>
    8. <replica>
    9. <priority>2</priority>
    10. </replica>
    11. <db>db_name</db>
    12. <table>table_name</table>
    13. <where>id=10</where>
    14. </postgresql>
    15. </source>

    PostgreSQL 中的表:

    ClickHouse 中的表, 从上面创建的 PostgreSQL 表中检索数据:

    1. CREATE TABLE default.postgresql_table
    2. (
    3. `float_nullable` Nullable(Float32),
    4. `str` String,
    5. `int_id` Int32
    6. )
    7. ENGINE = PostgreSQL('localhost:5432', 'public', 'test', 'postges_user', 'postgres_password');
    1. ┌─float_nullable─┬─str──┬─int_id─┐
    2. ᴺᵁᴸᴸ test 1
    3. └────────────────┴──────┴────────┘

    使用非默认的模式: