PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 12.18 » Référence » Commandes SQL » CREATE PUBLICATION

CREATE PUBLICATION

CREATE PUBLICATION — définir une nouvelle publication

Synopsis

CREATE PUBLICATION nom
    [ FOR TABLE [ ONLY ] nom_table [ * ] [, ...]
      | FOR ALL TABLES ]
    [ WITH ( parametre_publication [= valeur] [, ... ] ) ]

  

Description

CREATE PUBLICATION ajoute une nouvelle publication dans la base courante. Le nom de la publication doit être différent du nom de toutes les autres publications existante au sein de la base courante.

Une publication est essentiellement un groupe de table dont les changement de données sont destinés à être répliqué grâce à la réplication logique. Voir Section 30.1 pour les détails de comment les publications participent à la mise en place de la réplication logique.

Paramètres

nom

Le nom de la nouvelle publication.

FOR TABLE

Spécifie une liste de tables à ajouter à la publication. Si ONLY est spécifié avant le nom de la table, seul cette table est ajoutée à la publication. Si ONLY n'est pas spécifié, la table ainsi que toutes les tables descendantes (s'il y en a) est ajoutées. De manière facultative, * peut être spécifié après le nom de la table pour indiquer explicitement que les tables descendantes doivent être incluses.

Seules les tables persistentes peuvent faire partie d'une publication. Les tables temporaires, tables non journalisées, tables distantes, vues matérialisées, vues standard ainsi que les tables partitionnées ne peuvent pas faire partie d'une publication. Pour répliquer une table partitionnée, il faut ajouter chaque partition individuellement à la publication.

FOR ALL TABLES

Marque la publication comme publication qui réplique les changement pour toutes les tables de la base, en incluant les tables qui seront crées dans le futur.

WITH ( parametre_publication [= valeur] [, ... ] )

Cette clause spécifique les paramètres facultatifs d'une publication. Les paramètres suivants sont supportés :

publish (string)

Ce paramètre détermine quelles opération DML seront publiées par la nouvelle publication aux souscripteurs. Le contenu est une liste d'opération séparé par des virgules. Les opérations autorisées sont insert, update, delete et truncate. Par défaut toutes les actions sont publiées, et donc la valeur par défaut pour cette option est 'insert, update, delete, truncate'.

Notes

Si ni FOR TABLE ni FOR ALL TABLES n'est spécifié, alors la publication commence avec un ensemble de tables vide. C'est utile si des tables doivent être ajoutée ultérieurement.

La création d'une publication ne démarre pas la réplication. Cela définit uniquement un regroupement ainsi qu'un filtre logique pour les futurs souscripteurs.

Pour créer une publication, l'utilisateur lançant la commande doit avec le privilège CREATE pour la base de données courante. (Bien entendu, les superutilisateurs coutournent cette vérification.)

Pour ajouter une table à une publication, l'utilisateur lançant la commande doit avoir les droits de propriétaire de la table. La clause FOR ALL TABLES nécessite d'être superutilisateur pour pouvoir l'utiliser.

Les tables ajoutées à une publication qui publie les opérations UPDATE et/ou DELETE doivent avoir REPLICA IDENTITY défini. Autrement ces opérations seront interdites sur ces tables.

Pour une commande INSERT ... ON CONFLICT, la publication publiera l'opération qui résulte de la commande. Ainsi, en fonction du résultat, cela pourrait être publiée comme un INSERT ou un UPDATE, ou cela pourrait ne pas être publié du tout.

Les commandes COPY ... FROM sont publiées comme des opérations INSERT.

Les opérations DDL ne sont pas publiées.

Exemples

Créer une publication qui publie tous les changement sur deux tables :

CREATE PUBLICATION mypublication FOR TABLE users, departments;
   

Créer une publication qui publie tous les changement sur toutes les tables :

CREATE PUBLICATION alltables FOR ALL TABLES;
   

Créer une publication qui ne publie que les opérations d'INSERT sur une table :

CREATE PUBLICATION insert_only FOR TABLE mydata
    WITH (publish = 'insert');
   

Compatibilité

CREATE PUBLICATION est une extension PostgreSQL au langage SQL.