Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

PostgreSQL

Permite conectarse a bases de datos en un servidor PostgreSQL remoto. Admite operaciones de lectura y escritura (consultas SELECT e INSERT) para intercambiar datos entre ClickHouse y PostgreSQL.

Proporciona acceso en tiempo real a la lista y a la estructura de las tablas del PostgreSQL remoto mediante las consultas SHOW TABLES y DESCRIBE TABLE.

Admite modificaciones en la estructura de la tabla (ALTER TABLE ... ADD|DROP COLUMN). Si el parámetro use_table_cache (consulte Parámetros del motor más abajo) está configurado en 1, la estructura de la tabla se almacena en caché y no se comprueba si se ha modificado, pero puede actualizarse con las consultas DETACH y ATTACH.

Crear una base de datos

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

Parámetros del motor

  • host:port — Dirección del servidor PostgreSQL.
  • database — Nombre de la base de datos remota.
  • user — Usuario de PostgreSQL.
  • password — Contraseña del usuario.
  • schema — Esquema de PostgreSQL.
  • use_table_cache — Indica si la estructura de la tabla de la base de datos se almacena en caché. Opcional. Valor predeterminado: 0.

Los parámetros TLS/SSL se redirigen a libpq y pueden proporcionarse mediante una colección con nombre o como argumentos clave-valor adicionales: sslmode (disable, allow, prefer, require, verify-ca o verify-full), y los certificados y la clave, en una de dos formas. sslrootcert (certificado de CA), sslcert (certificado de cliente) y sslkey (clave privada de cliente) son rutas a archivos locales del servidor y solo se aceptan desde una colección con nombre definida en el archivo de configuración del servidor. En cambio, sslrootcert_pem, sslcert_pem y sslkey_pem aceptan el contenido literal del archivo correspondiente, se pueden especificar desde SQL (por ejemplo, ENGINE = PostgreSQL('host:port', 'database', 'user', 'password', sslmode = 'verify-full', sslrootcert_pem = '...')) y se ocultan en los registros y las consultas SHOW, igual que una contraseña. Cuando no se especifican, se aplican los valores predeterminados de libpq (sslmode=prefer).

Compatibilidad con tipos de datos

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

Ejemplos de uso

Base de datos en ClickHouse que intercambia datos con el servidor PostgreSQL:

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

Lectura de datos de la tabla de PostgreSQL:

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

Escritura de datos en la tabla de PostgreSQL:

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

Supongamos que se modificó la estructura de la tabla en PostgreSQL:

postgre> ALTER TABLE test_table ADD COLUMN data Text

Como el parámetro use_table_cache se estableció en 1 cuando se creó la base de datos, la estructura de la tabla en ClickHouse se almacenó en caché y, por lo tanto, no se modificó:

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

Después de desvincular la tabla y volver a adjuntarla, la estructura se actualizó:

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)  │
└────────┴───────────────────┘
Navigation