Skip to main content
Permet d’exécuter des requêtes SELECT et INSERT sur des données stockées sur un serveur PostgreSQL distant.

Syntaxe

Arguments

Les arguments peuvent également être transmis à l’aide de collections nommées. Dans ce cas, host et port doivent être indiqués séparément. Cette approche est recommandée en production.

Valeur renvoyée

Un objet de type table avec les mêmes colonnes que la table PostgreSQL d’origine.
Dans la requête INSERT, pour distinguer la fonction de table postgresql(...) d’un nom de table accompagné d’une liste de noms de colonnes, vous devez utiliser les mots-clés FUNCTION ou TABLE FUNCTION. Voir les exemples ci-dessous.

Paramètres

Le pool de connexions utilisé par la fonction de table postgresql (ainsi que par le moteur de table PostgreSQL) peut être configuré à l’aide d’une clause SETTINGS en fin d’instruction. Lorsqu’un paramètre n’est pas spécifié, il prend par défaut la valeur du paramètre postgresql_* correspondant au niveau de la requête. Consultez la section Paramètres du moteur de table pour obtenir la liste complète des paramètres postgresql_connection_pool_* et postgresql_connection_attempt_timeout, ainsi que leurs valeurs par défaut. Exemple :

Détails d’implémentation

Les requêtes SELECT côté PostgreSQL s’exécutent sous la forme de COPY (SELECT ...) TO STDOUT à l’intérieur d’une transaction PostgreSQL en lecture seule, avec un commit après chaque requête SELECT. Les clauses WHERE simples, telles que =, !=, >, >=, <, <= et IN, sont exécutées sur le serveur PostgreSQL. Toutes les jointures, agrégations, opérations de tri, conditions IN [ array ] et la contrainte d’échantillonnage LIMIT sont exécutées dans ClickHouse, uniquement une fois la requête PostgreSQL terminée.

Passer une requête au lieu d’un nom de table

Au lieu d’un nom de table, le troisième argument peut être une requête SELECT transmise telle quelle à PostgreSQL. La structure de la table résultante est inférée à partir du résultat de la requête. La requête peut être écrite soit comme une sous-requête, soit encapsulée dans la fonction query :
Cela est utile pour déléguer à PostgreSQL les jointures, les agrégations ou tout autre traitement. Une telle table est en lecture seule : les requêtes INSERT n’y sont pas autorisées. La même syntaxe est prise en charge par le moteur de table PostgreSQL.
La forme de sous-requête (SELECT ...) est analysée par ClickHouse puis re-sérialisée dans le dialecte PostgreSQL (quotage des identifiants PostgreSQL et échappement des littéraux de chaîne) avant d’être envoyée au serveur. Elle doit donc être valide en ClickHouse SQL. Pour transmettre une syntaxe spécifique à PostgreSQL que ClickHouse n’analyse pas, utilisez la forme query('...'), dont le texte est envoyé tel quel à PostgreSQL.Toute clause externe WHERE, LIMIT, agrégation, etc. de la requête ClickHouse englobante n’est pas déléguée à la requête transmise — elle est appliquée dans ClickHouse après récupération du résultat complet de la requête. Pour restreindre les données lues depuis PostgreSQL, placez le filtre dans la requête transmise. Avec external_table_strict_query = 1, un filtre externe qui ne peut pas être délégué est rejeté avec une exception au lieu d’être appliqué localement.
Les requêtes INSERT côté PostgreSQL s’exécutent sous la forme de COPY "table_name" (field1, field2, ... fieldN) FROM STDIN à l’intérieur d’une transaction PostgreSQL avec commit automatique après chaque instruction INSERT. Les types Array de PostgreSQL sont convertis en tableaux ClickHouse.
Attention : dans PostgreSQL, une colonne de type tableau comme Integer[] peut contenir des tableaux de dimensions différentes selon les lignes, mais dans ClickHouse, seuls des tableaux multidimensionnels de même dimension sont autorisés dans toutes les lignes.
Prend en charge plusieurs répliques, qui doivent être séparées par |. Par exemple :
or
Prend en charge la priorité des répliques pour la source de dictionnaire PostgreSQL. Plus le nombre dans la map est élevé, plus la priorité est faible. La priorité la plus élevée est 0.

Exemples

Table dans PostgreSQL :
Sélection de données dans ClickHouse à l’aide d’arguments simples :
Ou en utilisant des collections nommées :
Insertion :
Utiliser un schéma non par défaut :

Répliquer ou migrer des données Postgres avec PeerDB

En plus des fonctions de table, vous pouvez également utiliser PeerDB de ClickHouse pour mettre en place un pipeline de données continu de Postgres vers ClickHouse. PeerDB est un outil spécialement conçu pour répliquer des données de Postgres vers ClickHouse à l’aide de la capture de données modifiées (CDC).
Dernière modification le 23 juillet 2026