Crée une table ClickHouse à partir d’un dump initial d’une table PostgreSQL et lance le processus de réplication, c.-à-d. exécute une tâche en arrière-plan pour appliquer les nouvelles modifications au fur et à mesure qu’elles surviennent dans la table PostgreSQL de la base de données PostgreSQL distante.
Si plusieurs tables sont nécessaires, il est fortement recommandé d’utiliser le moteur de base de données MaterializedPostgreSQL plutôt que le moteur de table, ainsi que le paramètre materialized_postgresql_tables_list, qui spécifie les tables à répliquer (il sera également possible d’ajouter le schema de la base de données). Les performances seront nettement meilleures en termes d’utilisation du CPU, avec moins de connexions et moins de slots de réplication dans la base de données PostgreSQL distante.
Création d’une table
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;Paramètres du moteur
host:port— Adresse du serveur PostgreSQL.database— Nom de la base de données distante.table— Nom de la table distante.user— Utilisateur PostgreSQL.password— Mot de passe de l’utilisateur.
TLS/SSL
Les paramètres TLS/SSL sont transmis à libpq et peuvent être fournis via une collection nommée ou sous forme d'arguments clé-valeur placés à la fin du moteur : sslmode (disable, allow, prefer, require, verify-ca ou verify-full ; s'il n'est pas défini, la valeur par défaut de libpq, prefer, s'applique), ainsi que les certificats et la clé, sous l'une de deux formes. sslrootcert (certificat de CA), sslcert (certificat client) et sslkey (clé privée du client) sont des chemins vers des fichiers locaux au serveur, acceptés uniquement à partir d'une collection nommée définie dans le fichier de configuration du serveur. sslrootcert_pem, sslcert_pem et sslkey_pem acceptent à la place le contenu littéral du fichier correspondant, peuvent être spécifiés en SQL et sont masqués dans les logs et les requêtes SHOW, comme un mot de passe.
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;Les paramètres TLS/SSL font partie des paramètres de connexion à PostgreSQL, qui sont définis lors de la création de la table.
Prérequis
-
Le paramètre wal_level doit avoir la valeur
logical, et le paramètremax_replication_slotsdoit avoir une valeur d’au moins2dans le fichier de configuration de PostgreSQL. -
Une table utilisant le moteur
MaterializedPostgreSQLdoit avoir une clé primaire, identique à l’index de replica identity (par défaut : la clé primaire) d’une table PostgreSQL (voir les détails sur l’index de replica identity). -
Seul le moteur de base de données Atomic est autorisé.
-
Le moteur de table
MaterializedPostgreSQLfonctionne uniquement avec les versions de PostgreSQL >= 11, car son implémentation nécessite la fonction PostgreSQL pg_replication_slot_advance.
Colonnes virtuelles
-
_version— Compteur de transactions. Type : UInt64. -
_sign— Indicateur de suppression. Type : Int8. Valeurs possibles :1— La ligne n’est pas supprimée,-1— La ligne est supprimée.
Il n’est pas nécessaire d’ajouter ces colonnes lors de la création d’une table. Elles sont toujours accessibles dans une requête SELECT.
La colonne _version correspond à la position LSN dans le WAL et peut donc être utilisée pour vérifier à quel point la réplication est à jour.
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;