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

CREATE SUBSCRIPTION

CREATE SUBSCRIPTION — définir une nouvelle souscription

Synopsis

CREATE SUBSCRIPTION nom_souscription
    CONNECTION 'conninfo'
    PUBLICATION nom_publication [, ...]
    [ WITH ( param_souscription [= valeur] [, ... ] ) ]
  

Description

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.

Paramètres

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.

Notes

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.

Exemples

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);
   

Compatibilité

CREATE SUBSCRIPTION est une extension PostgreSQL au standard SQL.