ClickHouse/docs/zh/engines/database-engines/postgresql.md

4.5 KiB
Raw Blame History

slug sidebar_position sidebar_label
/zh/engines/database-engines/postgresql 35 PostgreSQL

PostgreSQL

允许连接到远程PostgreSQL服务。支持读写操作(SELECTINSERT查询)以在ClickHouse和PostgreSQL之间交换数据。

SHOW TABLESDESCRIBE TABLE查询的帮助下从远程PostgreSQL实时访问表列表和表结构。

支持表结构修改(ALTER TABLE ... ADD|DROP COLUMN)。如果use_table_cache参数(参见下面的引擎参数)设置为1,则会缓存表结构,不会检查是否被修改,但可以用DETACHATTACH查询进行更新。

创建数据库

CREATE DATABASE test_database 
ENGINE = PostgreSQL('host:port', 'database', 'user', 'password'[, `use_table_cache`]);

引擎参数

  • host:port — PostgreSQL服务地址
  • database — 远程数据库名次
  • user — PostgreSQL用户名称
  • password — PostgreSQL用户密码
  • schema - PostgreSQL 模式
  • use_table_cache — 定义数据库表结构是否已缓存或不进行。可选的。默认值: 0.

支持的数据类型

PostgreSQL ClickHouse
DATE Date
TIMESTAMP DateTime
REAL Float32
DOUBLE Float64
DECIMAL, NUMERIC Decimal
SMALLINT Int16
INTEGER Int32
BIGINT Int64
SERIAL UInt32
BIGSERIAL UInt64
TEXT, CHAR String
INTEGER Nullable(Int32)
ARRAY Array

使用示例

ClickHouse中的数据库与PostgreSQL服务器交换数据:

CREATE DATABASE test_database 
ENGINE = PostgreSQL('postgres1:5432', 'test_database', 'postgres', 'mysecretpassword', 1);
SHOW DATABASES;
┌─name──────────┐
│ default       │
│ test_database │
│ system        │
└───────────────┘
SHOW TABLES FROM test_database;
┌─name───────┐
│ test_table │
└────────────┘

从PostgreSQL表中读取数据

SELECT * FROM test_database.test_table;
┌─id─┬─value─┐
│  1 │     2 │
└────┴───────┘

将数据写入PostgreSQL表

INSERT INTO test_database.test_table VALUES (3,4);
SELECT * FROM test_database.test_table;
┌─int_id─┬─value─┐
│      1 │     2 │
│      3 │     4 │
└────────┴───────┘

在PostgreSQL中修改了表结构

postgre> ALTER TABLE test_table ADD COLUMN data Text

当创建数据库时,参数use_table_cache被设置为1ClickHouse中的表结构被缓存因此没有被修改:

DESCRIBE TABLE test_database.test_table;
┌─name───┬─type──────────────┐
│ id     │ Nullable(Integer) │
│ value  │ Nullable(Integer) │
└────────┴───────────────────┘

分离表并再次附加它之后,结构被更新了:

DETACH TABLE test_database.test_table;
ATTACH TABLE test_database.test_table;
DESCRIBE TABLE test_database.test_table;
┌─name───┬─type──────────────┐
│ id     │ Nullable(Integer) │
│ value  │ Nullable(Integer) │
│ data   │ Nullable(String)  │
└────────┴───────────────────┘