PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 13.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. Néanmoins, ceci ne s'applique pas à une table partitionnée. Les partitions d'une table sont toujours considérées implicitement comme faisant partie de la publication, donc elles ne sont jamais ajoutées explicitement à la publication.

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

Quand une table partitionnée est ajoutée à une publication, toutes les partitions existantes et futures seront considérées implicitement comme faisant partie de la publication. Donc, même les opérations réalisées directement sur une partition seront publiées via les publications dont fait partie la table partitionnée.

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'.

publish_via_partition_root (boolean)

Ce paramètre détermine si les modifications dans une table partitionnée (ou dans ses partitions) contenue dans la publication seront publiées en utilisant l'identité et le schéma de la table partitionnée plutôt que celle des partitions individuelles réellement modifiées ; ce dernier est le comportement par défaut. Activer ce paramètre permet à des changements d'être répliqués dans une table non partitionnée ou dans une table partitionnée différemment.

Si ceci est activé, les opérations TRUNCATE réalisées directement sur les partitions ne sont pas répliquées.

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.

ATTACH-er une table dans un arbre de partition dont la racine est publiée en utilisant une publication ayant publish_via_partition_root configuré to true ne résulte pas en la réplication du contenu existant de la table.

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.