Documentation PostgreSQL 14.22 » Référence » Commandes SQL » CREATE SUBSCRIPTION

Précédent | Niveau supérieur | Suivant
CREATE STATISTICS | Sommaire | CREATE TABLE

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

## Voir aussi

ALTER SUBSCRIPTION, DROP SUBSCRIPTION, CREATE PUBLICATION, ALTER PUBLICATION