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 31.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.
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
et
delete
. Par défaut toutes les actions sont
publiées, et donc la valeur par défaut pour cette option est
'insert, update, delete'
.
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 TRUNCATE
et 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.