Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

PostgreSQL

Puede consultar aquí una guía completa de migración de PostgreSQL a ClickHouse, que incluye recomendaciones sobre el modelado de datos y conceptos equivalentes. A continuación, se describe cómo conectar ClickHouse con PostgreSQL.

Esta página cubre las siguientes opciones para integrar PostgreSQL con ClickHouse:

  • usar el motor de tabla PostgreSQL para leer desde una tabla de PostgreSQL
  • usar el motor de base de datos experimental MaterializedPostgreSQL para sincronizar una base de datos de PostgreSQL con una base de datos de ClickHouse

Uso del motor de tabla PostgreSQL

El motor de tabla PostgreSQL permite realizar operaciones SELECT y INSERT sobre datos almacenados en un servidor PostgreSQL remoto desde ClickHouse. Este artículo ilustra métodos básicos de integración utilizando una sola tabla.

Configurar PostgreSQL

  1. En postgresql.conf, agregue la siguiente entrada para que PostgreSQL escuche en las interfaces de red:
listen_addresses = '*'
  1. Cree un usuario para que ClickHouse se conecte. A modo de demostración, este ejemplo concede privilegios completos de superusuario.
CREATE ROLE clickhouse_user SUPERUSER LOGIN PASSWORD 'ClickHouse_123';
  1. Cree una nueva base de datos en PostgreSQL:
CREATE DATABASE db_in_psg;
  1. Cree una nueva tabla:
CREATE TABLE table1 (
    id         integer primary key,
    column1    varchar(10)
);
  1. Añadamos unas cuantas filas para probar:
INSERT INTO table1
  (id, column1)
VALUES
  (1, 'abc'),
  (2, 'def');
  1. Para configurar PostgreSQL de modo que permita conexiones para la replicación a la nueva base de datos con el nuevo usuario, agregue la siguiente entrada al archivo pg_hba.conf. Actualice la línea de dirección con la subred o la dirección IP de su servidor PostgreSQL:
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    db_in_psg             clickhouse_user 192.168.1.0/24          password
  1. Recargue la configuración de pg_hba.conf (ajuste este comando según su versión):
/usr/pgsql-12/bin/pg_ctl reload
  1. Comprueba que el nuevo clickhouse_user pueda iniciar sesión:
psql -U clickhouse_user -W -d db_in_psg -h <your_postgresql_host>

Defina una tabla en ClickHouse

  1. Inicie sesión en clickhouse-client:
clickhouse-client --user default --password ClickHouse123!
  1. Creemos una nueva base de datos:
CREATE DATABASE db_in_ch;
  1. Cree una tabla que use PostgreSQL:
CREATE TABLE db_in_ch.table1
(
    id UInt64,
    column1 String
)
ENGINE = PostgreSQL('postgres-host.domain.com:5432', 'db_in_psg', 'table1', 'clickhouse_user', 'ClickHouse_123');

Los parámetros mínimos necesarios son:

parámetro Descripción ejemplo
host:port hostname o dirección IP y puerto postgres-host.domain.com:5432
database nombre de la base de datos PostgreSQL db_in_psg
user nombre de usuario para conectarse a Postgres clickhouse_user
password contraseña para conectarse a Postgres ClickHouse_123

Pruebe la integración

  1. En ClickHouse, consulte las filas iniciales:
SELECT * FROM db_in_ch.table1

La tabla de ClickHouse debería poblarse automáticamente con las dos filas que ya existían en la tabla de PostgreSQL:

Query id: 34193d31-fe21-44ac-a182-36aaefbd78bf

┌─id─┬─column1─┐
│  1 │ abc     │
│  2 │ def     │
└────┴─────────┘
  1. De vuelta en PostgreSQL, agregue un par de filas a la tabla:
INSERT INTO table1
  (id, column1)
VALUES
  (3, 'ghi'),
  (4, 'jkl');
  1. Esas dos nuevas filas deberían aparecer en tu tabla de ClickHouse:
SELECT * FROM db_in_ch.table1

La respuesta debería ser:

Query id: 86fa2c62-d320-4e47-b564-47ebf3d5d27b

┌─id─┬─column1─┐
│  1 │ abc     │
│  2 │ def     │
│  3 │ ghi     │
│  4 │ jkl     │
└────┴─────────┘
  1. Veamos qué sucede al añadir filas a la tabla de ClickHouse:
INSERT INTO db_in_ch.table1
  (id, column1)
VALUES
  (5, 'mno'),
  (6, 'pqr');
  1. Las filas añadidas en ClickHouse deberían aparecer en la tabla de PostgreSQL:
db_in_psg=# SELECT * FROM table1;
id | column1
----+---------
  1 | abc
  2 | def
  3 | ghi
  4 | jkl
  5 | mno
  6 | pqr
(6 rows)

Este ejemplo mostró la integración básica entre PostgreSQL y ClickHouse mediante el motor de tabla PostrgeSQL. Consulta la página de documentación del motor de tabla PostgreSQL para conocer más funciones, como especificar esquemas, devolver solo un subconjunto de columnas y conectarse a múltiples réplicas. Consulta también la entrada del blog ClickHouse and PostgreSQL - a match made in data heaven - part 1.

Uso del motor de base de datos MaterializedPostgreSQL

No es compatible con ClickHouse Cloud
Funcionalidad experimental

El motor de base de datos PostgreSQL utiliza las funciones de replicación de PostgreSQL para crear una réplica de la base de datos con todos los esquemas y tablas, o con un subconjunto de ellos. Este artículo ilustra métodos básicos de integración usando una base de datos, un esquema y una tabla.

En los siguientes procedimientos, se utilizan la CLI de PostgreSQL (psql) y la ClickHouse CLI (clickhouse-client). El servidor PostgreSQL está instalado en Linux. A continuación se muestra la configuración mínima si la base de datos PostgreSQL es una instalación de prueba nueva

En PostgreSQL

  1. En postgresql.conf, configure los niveles mínimos de escucha, el wal level de replicación y los slots de replicación:

añada las siguientes entradas:

listen_addresses = '*'
max_replication_slots = 10
wal_level = logical

*ClickHouse necesita como mínimo el wal level logical y al menos 2 slots de replicación

  1. Con una cuenta de administrador, cree un usuario para conectarse desde ClickHouse:
CREATE ROLE clickhouse_user SUPERUSER LOGIN PASSWORD 'ClickHouse_123';

*con fines de demostración, se han concedido todos los privilegios de superusuario.

  1. cree una nueva base de datos:
CREATE DATABASE db1;
  1. conéctese a la nueva base de datos desde psql:
\connect db1
  1. cree una nueva tabla:
CREATE TABLE table1 (
    id         integer primary key,
    column1    varchar(10)
);
  1. añadir las filas iniciales:
INSERT INTO table1
(id, column1)
VALUES
(1, 'abc'),
(2, 'def');
  1. Configure PostgreSQL para permitir las conexiones a la nueva base de datos con el nuevo usuario para la replicación. A continuación se muestra la entrada mínima que debe añadirse al archivo pg_hba.conf:
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    db1             clickhouse_user 192.168.1.0/24          password

*A efectos de demostración, aquí se utiliza el método de autenticación con contraseña en texto claro. Actualice la línea de dirección con la subred o la dirección del servidor, según la documentación de PostgreSQL

  1. Vuelva a cargar la configuración de pg_hba.conf con algo como esto (ajústelo según su versión):
/usr/pgsql-12/bin/pg_ctl reload
  1. Pruebe a iniciar sesión con el nuevo clickhouse_user:
 psql -U clickhouse_user -W -d db1 -h <your_postgresql_host>

En ClickHouse

  1. inicie sesión en la CLI de ClickHouse
clickhouse-client --user default --password ClickHouse123!
  1. Habilite la función experimental de PostgreSQL para el motor de base de datos:
SET allow_experimental_database_materialized_postgresql=1
  1. Cree la nueva base de datos que se va a replicar y defina la tabla inicial:
CREATE DATABASE db1_postgres
ENGINE = MaterializedPostgreSQL('postgres-host.domain.com:5432', 'db1', 'clickhouse_user', 'ClickHouse_123')
SETTINGS materialized_postgresql_tables_list = 'table1';

opciones mínimas:

parámetro Descripción ejemplo
host:port nombre de host o IP y puerto postgres-host.domain.com:5432
database nombre de la base de datos PostgreSQL db1
user nombre de usuario para conectarse a Postgres clickhouse_user
password contraseña para conectarse a Postgres ClickHouse_123
settings configuración adicional del motor materialized_postgresql_tables_list = 'table1'
  1. Verifique que la tabla inicial contiene datos:
ch_env_2 :) select * from db1_postgres.table1;

SELECT *
FROM db1_postgres.table1
Query id: df2381ac-4e30-4535-b22e-8be3894aaafc

┌─id─┬─column1─┐
│  1 │ abc     │
└────┴─────────┘
┌─id─┬─column1─┐
│  2 │ def     │
└────┴─────────┘

Pruebe la replicación básica

  1. En PostgreSQL, añada nuevas filas:
INSERT INTO table1
(id, column1)
VALUES
(3, 'ghi'),
(4, 'jkl');
  1. En ClickHouse, verifique que las nuevas filas sean visibles:
ch_env_2 :) select * from db1_postgres.table1;

SELECT *
FROM db1_postgres.table1
Query id: b0729816-3917-44d3-8d1a-fed912fb59ce

┌─id─┬─column1─┐
│  1 │ abc     │
└────┴─────────┘
┌─id─┬─column1─┐
│  4 │ jkl     │
└────┴─────────┘
┌─id─┬─column1─┐
│  3 │ ghi     │
└────┴─────────┘
┌─id─┬─column1─┐
│  2 │ def     │
└────┴─────────┘

Resumen

Esta guía de integración se centró en un ejemplo sencillo de cómo replicar una base de datos con una tabla; sin embargo, existen opciones más avanzadas, como replicar toda la base de datos o añadir nuevas tablas y esquemas a las replicaciones existentes. Aunque los comandos DDL no son compatibles con esta replicación, el motor puede configurarse para detectar cambios y recargar las tablas cuando se produzcan cambios estructurales.

Navigation