Crea una tabla de ClickHouse con un volcado inicial de datos de una tabla de PostgreSQL e inicia el proceso de replicación; es decir, ejecuta un trabajo en segundo plano para aplicar nuevos cambios a medida que se producen en la tabla de PostgreSQL de la base de datos remota.
Si se requiere más de una tabla, se recomienda encarecidamente usar el motor de base de datos MaterializedPostgreSQL en lugar del motor de tabla y usar la configuración materialized_postgresql_tables_list, que especifica las tablas que se van a replicar (también será posible añadir el schema de la base de datos). Esto ofrece un rendimiento mucho mejor en términos de CPU, con menos conexiones y menos slots de replicación en la base de datos remota de PostgreSQL.
Crear una tabla
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;Parámetros del motor
host:port— Dirección del servidor PostgreSQL.database— Nombre de la base de datos remota.table— Nombre de la tabla remota.user— Usuario de PostgreSQL.password— Contraseña del usuario.
TLS/SSL
Los parámetros de TLS/SSL se reenvían a libpq y pueden proporcionarse mediante una colección con nombre o como argumentos clave-valor al final de la definición del motor: sslmode (disable, allow, prefer, require, verify-ca o verify-full; si no se especifica, se usa el valor predeterminado prefer de libpq), así como los certificados y la clave, de 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, pueden especificarse desde SQL y se ocultan en los registros y las consultas SHOW, como una contraseña.
CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_table', 'postgres_user', 'postgres_password',
sslmode = 'verify-full', sslrootcert_pem = '-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----')
PRIMARY KEY key;Los parámetros TLS/SSL forman parte de los parámetros de conexión de PostgreSQL, que se establecen al crear la tabla.
Requisitos
-
La configuración wal_level debe tener el valor
logical, y el parámetromax_replication_slotsdebe tener un valor de al menos2en el archivo de configuración de PostgreSQL. -
Una tabla con el motor
MaterializedPostgreSQLdebe tener una clave primaria, que debe ser la misma que el índice de identidad de réplica (de forma predeterminada, la clave primaria) de una tabla de PostgreSQL (consulte los detalles sobre el índice de identidad de réplica). -
Solo se permite la base de datos Atomic.
-
El motor de tabla
MaterializedPostgreSQLsolo funciona con versiones de PostgreSQL >= 11, ya que la implementación requiere la función de PostgreSQL pg_replication_slot_advance.
Columnas virtuales
-
_version— Contador de transacciones. Tipo: UInt64. -
_sign— Marca de eliminación. Tipo: Int8. Valores posibles:1— La fila no está eliminada,-1— La fila está eliminada.
No es necesario añadir estas columnas al crear una tabla. Siempre se puede acceder a ellas en la consulta SELECT.
La columna _version equivale a la posición de LSN en WAL, por lo que puede usarse para comprobar lo actualizada que está la replicación.
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;