CREATE SUBSCRIPTION — définir une nouvelle souscription
CREATE SUBSCRIPTIONnom_souscription
CONNECTION 'conninfo
' PUBLICATIONnom_publication
[, ...] [ WITH (param_souscription
[=valeur
] [, ... ] ) ]
CREATE SUBSCRIPTION
ajoute une nouvelle souscription pour
la base de donnée courante. Le nom de la souscription doit être différent
du nom de toutes les autres souscriptions existante dans la base.
La souscription représente une connexion de réplication vers un serveur publiant des données. Ainsi cette commande ne fait pas qu'ajouter des définitions dans le catalogue local mais crée également un slot de réplication sur le serveur publiant les données.
Un worker de réplication logique sera démarré pour répliquer les données pour la nouvelle souscription à la vlidation de la transaction dans laquelle cette commande est lancée.
Des informations supplémentaires sur la souscription et la réplication logique dans son ensemble sont également disponible sur Section 31.2 et Chapitre 31.
nom_souscription
Le nom de la nouvelle souscriptions.
CONNECTION 'conninfo
'
La chaîne de connexion vers la serveur publiant les données. Pour plus de détails voir Section 34.1.1.
PUBLICATION nom_publication
Nom des publications sur le serveur publiant les données auxquelles souscrire.
WITH ( param_souscription
[= valeur
] [, ... ] )
Cette clause spécifie les paramètres facultatifs pour une souscription. Les paramètres suivants sont supportés :
copy_data
(boolean
)
Spécifie si les données existantes dans les publications qui sont
en train d'être souscrites devraient être copiées une fois la
réplication démarrée. La valeur par défaut est
true
.
create_slot
(boolean
)
Spécifie si la commande devrait créer le slot de réplication sur le
serveur publiant les données. La valeur par défaut est
true
.
enabled
(boolean
)
Spécifie si la souscription devrait répliquer activement, ou si elle
devrait uniquement configurée mais pas démarrée. La valeur par
défaut est true
.
slot_name
(string
)Le nom du solt de réplication à utiliser. Le comportement par défaut est d'utiliser le nom de la souscription comme nom de slot.
Quand slot_name
est positionné à
NONE
, il n'y aura pas de slot de réplication
associée ) la souscription. Cela peut être utile si le slot de
réplication sera crée manuellement ultérieurement. Une telle
souscription doit également avoir à la fois
enabled
et create_slot
positionnés à false
.
synchronous_commit
(enum
)
La valeur de ce paramètre surcharge le paramètre
synchronous_commit pour les processus workers
d'application de cette souscription. La valeur par défaut est
off
.
Il est sans danger d'utiliser off
pour la réplication logique :
Si le souscripteur perd des transactions à cause d'une
synchronisation manquante, les données seront renvoyée par le serveur publiant les données.
Un paramétrage différent pourrait être appropriée lorsque la
réplication logique est utilisée. Les workers de réplication logique
rapportent la position d'écriture et de synchronisation au serveur
publiant les données, et lorsque la réplication synchrone est
utilisée, le serveur publiant les données attendra la
synchronisation. Cela veut dire que positionner
synchronous_commit
pour le souscripteur à
off
quand la souscription est utilisée pour de la
réplication synchrone pourrait augmenter la latence des
COMMIT
sur le serveur publiant les données. Dans
ce scénario, il peut être avantageux de positionner
synchronous_commit
à local
ou au dessus.
binary
(boolean
)
Spécifie si la souscription va demander au publieur d'envoyer les
données au format binaire (et non pas texte). La valeur par défaut
est false
. Même quand cette option est activée,
seuls les types de données qui ont des fonctions d'envoi et de
réception binaire seront transférés en binaire.
Lors de réplication inter-version, il pourrait arriver que le
publieur ait une fonction d'envoi binaire pour un certain type de
données, mais que le souscripteur n'ait pas de fonction de
réception binaire pour ce type. Dans un tel scas, le tranfert de
données échouera, et l'option binary
ne pourra
pas être utilisée.
connect
(boolean
)
Spécifie si CREATE SUBSCRIPTION
devrait se connecter au serveur publiant les données ou non.
Positionner ce paramètre à false
changer la valeur
par défaut de enabled
,
create_slot
et
copy_data
à false
.
Il n'est pas autorisé de combiner connect
positionné à false
et enabled
,
create_slot
, ou copy_data
positionné à true
.
Puisqu'aucune connection n'est faite quand cette option est initialisée
à false
,
les tables ne sont pas souscrites, et donc après l'activation de la
souscription rien ne sera répliqué. Il est nécessaire d'exécuter
ALTER SUBSCRIPTION ... REFRESH PUBLICATION
afin
que les tables soient souscrites.
streaming
(boolean
)Spécifie si le flux de transactions en cours doit être activé pour cette souscription. Par défaut, toutes les transactions sont entièrement décodées sur le publieur, puis envoyées au souscripteur en un morceau.
Voir Section 31.7 pour plus de détail sur comment configurer le contrôle d'accès entre la souscription et l'instance de publication.
Lors de la création d'un slot de réplication (comportement par défaut),
CREATE SUBSCRIPTION
ne peut pas être exécuté à
l'intérieur d'un bloc de transaction.
Créer une souscription qui connecte la même instance (par exemple, pour
répliquer entre des bases de données de la même instance ou pour répliquer
dans la même base de données) réussira seulement si le slot de réplication
n'est pas créé dans la même commande. Sinon, l'appel à CREATE
SUBSCRIPTION
va pauser. Pour le faire fonctionner, créer le slot
de réplication séparément (en utilisant la fonction
pg_create_logical_replication_slot
avec le nom de
plugin pgoutput
) et créer la souscription en utilisant
le paramètre create_slot = false
. C'est une restriction
d'implémentation qui pourrait être supprimé dans une prochaine version.
Créer une souscription à un serveur distant qui réplique les tables dans la
publication mypublication
et
insert_only
et démarre la réplication immédiatement après
le commit :
CREATE SUBSCRIPTION mysub CONNECTION 'host=192.168.1.50 port=5432 user=foo dbname=foodb' PUBLICATION mypublication, insert_only;
Crée une souscription vers un serveur distant qui réplique les tables
dans la publication insert_only
et ne commence pas
la réplication jusqu'à ce qu'elle soit activée plus tard.
CREATE SUBSCRIPTION mysub CONNECTION 'host=192.168.1.50 port=5432 user=foo dbname=foodb' PUBLICATION insert_only WITH (enabled = false);
CREATE SUBSCRIPTION
est une extension
PostgreSQL au standard SQL.