SELECT e INSERT sobre datos almacenados en un servidor PostgreSQL remoto.
Sintaxis
Argumentos
Los argumentos también pueden pasarse mediante colecciones con nombre. En este caso,
host y port deben especificarse por separado. Este enfoque se recomienda para entornos de producción.
Valor devuelto
En la consulta
INSERT, para distinguir la función de tabla postgresql(...) del nombre de la tabla con una lista de nombres de columnas, debe usar las palabras clave FUNCTION o TABLE FUNCTION. Vea los ejemplos a continuación.Configuración
postgresql (y el motor de tabla PostgreSQL) puede configurarse con una cláusula SETTINGS al final. Si no se especifica una configuración, se usa de forma predeterminada el valor de la configuración postgresql_* correspondiente a nivel de consulta. Consulte la sección Configuración del motor de tabla para ver la lista completa de las configuraciones postgresql_connection_pool_* y postgresql_connection_attempt_timeout, así como sus valores predeterminados.
Ejemplo:
Detalles de implementación
SELECT del lado de PostgreSQL se ejecutan como COPY (SELECT ...) TO STDOUT dentro de una transacción de PostgreSQL de solo lectura, con commit después de cada consulta SELECT.
Las cláusulas WHERE simples, como =, !=, >, >=, <, <= e IN, se ejecutan en el servidor PostgreSQL.
Todos los joins, las agregaciones, la ordenación, las condiciones IN [ array ] y la restricción de muestreo LIMIT se ejecutan en ClickHouse solo después de que finaliza la consulta a PostgreSQL.
Pasar una consulta en lugar del nombre de una tabla
SELECT que se pasa a PostgreSQL tal cual. La estructura de la tabla resultante se infiere a partir del resultado de la consulta. La consulta puede escribirse como una subconsulta o envolverse en la función query:
INSERT en ella. La misma sintaxis es compatible con el motor de tabla PostgreSQL.
La forma de subconsulta
(SELECT ...) es analizada por ClickHouse y se vuelve a serializar en el dialecto de PostgreSQL (entrecomillado de identificadores de PostgreSQL y escaping de literales de cadena) antes de enviarse al servidor. Por lo tanto, debe ser una consulta ClickHouse SQL válida. Para pasar sintaxis específica de PostgreSQL que ClickHouse no analiza, usa la forma query('...'), cuyo texto se envía a PostgreSQL literalmente.Cualquier WHERE, LIMIT, agregación, etc., externos de la consulta de ClickHouse circundante no se hacen pushdown en la consulta pasada; se aplican en ClickHouse después de recuperar el resultado completo de la consulta. Para restringir los datos leídos desde PostgreSQL, coloca el filtro dentro de la consulta pasada. Con external_table_strict_query = 1, un filtro externo que no puede hacerse pushdown se rechaza con una excepción en lugar de aplicarse localmente.INSERT del lado de PostgreSQL se ejecutan como COPY "table_name" (field1, field2, ... fieldN) FROM STDIN dentro de una transacción de PostgreSQL, con autocommit después de cada sentencia INSERT.
Los tipos Array de PostgreSQL se convierten en arrays de ClickHouse.
Ten cuidado: en PostgreSQL, una columna de tipo array como Integer[] puede contener arrays de distintas dimensiones en diferentes filas, pero en ClickHouse solo se permite tener arrays multidimensionales de la misma dimensión en todas las filas.
|. Por ejemplo:
0.
Ejemplos
Replicar o migrar datos de Postgres con PeerDB
Además de las funciones de tabla, también puedes usar PeerDB de ClickHouse para configurar un pipeline de datos continuo de Postgres a ClickHouse. PeerDB es una herramienta diseñada específicamente para replicar datos de Postgres a ClickHouse mediante captura de cambios de datos (CDC).