CREATE PUBLICATION — définir une nouvelle publication
CREATE PUBLICATIONnom
[ FOR TABLE [ ONLY ]nom_table
[ * ] [, ...] | FOR ALL TABLES ] [ WITH (parametre_publication
[=valeur
] [, ... ] ) ]
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.
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.
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.
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');
CREATE PUBLICATION
est une extension
PostgreSQL au langage SQL.