Type: | string |
Contexte: | sighup |
Redémarrer: | false |
Précise une liste de noms de serveurs en standby acceptant une réplication synchrone, comme décrite dans synchronous-replication. À tout moment, il y aura au moins un serveur standby synchrone actif ; les transactions en attente de validation seront autorisées à continuer après que les serveurs standbys synchrones auront confirmé la réception des données. Les standbys synchrones sont les serveurs standbys nommés dans cette liste, qui sont à la fois connectés et qui récupèrent les données en temps réel (comme indiqué par l'état streaming
dans la vue pg_stat_replication). Indiquer plus d'un serveur standby synchrone permet une meilleure haute- disponibilité et une meilleure protection contre les pertes de données.
Le nom d'un serveur standby est indiqué dans ce cas au niveau du paramètre application_name du standby, tel qu'il est configuré dans l'information de connexion du standby. Dans le cas d'un standby en réplication physique, ceci doit être configuré dans le paramètre primary_conninfo. La valeur par défaut est la configuration de cluster_name si configuré, et sinon walreceiver
. Pour la réplication logique, cela peut se configurer dans l'information de connexion de la souscription, et vaut par défaut le nom de la souscription. Pour les autres consommateurs de flux de réplication, veuillez consulter leur documentation.
Ce paramètre indique une liste de serveurs standbys en utilisant une des deux syntaxes suivantes :[FIRST] nb_sync ( nom_standby [, ...] )ANY nb_sync ( nom_standby [, ...] )nom_standby [, ...] où num_sync est le nombre de standbys synchrones dont les transactions doivent attendre des réponses, et nom_standby est le nom d'un serveur secondaire (standby). FIRST
et ANY
spécifie la méthode pour choisir les serveurs secondaires synchrones dans la liste des serveurs.
Le mot-clé FIRST
, utilisé avec num_sync, spécifie une réplication synchrone basée sur la priorité, si bien que chaque validation de transaction attendra jusqu'à ce que les enregistrements des WAL soient répliqués de manière synchrone sur num_sync serveurs secondaires, choisis en fonction de leur priorités. Par exemple, utiliser la valeur FIRST 3 (s1, s2, s3, s4)
forcera chaque commit à attendre la réponse de trois serveurs secondaire de plus haute priorité choisis parmis les seveurs secondaires s1
, s2
, s3
et s4
. Les noms de serveurs secondaires qui apparaissent avant dans la liste reçoivent des priorités plus importantes et seront pris en considération pour être synchrones. Les autres serveurs secondaires apparaissant plus loin dans cette liste représentent les serveurs secondaire potentiellement synchrones. Si l'un des serveurs secondaires actuellement synchrones se déconnecte pour quelque raison que ce soit, il sera remplacé par le serveur secondaire de priorité la plus proche. Le mot clé FIRST
est facultatif.
Le mot-clé ANY
, utilisé avec num_sync, spécifie une réplication synchrone basée sur un quorum, si bien que chaque validation de transaction attendra jusqu'à ce que les enregistrements des WAL soient répliqués de manière synchrone sur au moinsnum_sync des serveurs secondaires listés. Par exemple, utiliser la valeur ANY 3 (s1, s2, s3, s4)
ne bloquera chaque commit que le temps qu'au moins trois des serveurs de la liste s1
, s2
, s3
and s4
aient répondu, quels qu'ils soient.
FIRST
et ANY
sont insensibles à la casse. Si ces mots-clés sont utilisés comme nom d'un serveur secondaire, le paramètre standby_name doit être entouré de guillemets doubles.
La troisième syntaxe était utilisée avant PostgreSQL version 9.6 est toujours supportée. Cela revient à la nouvelle syntaxe avec FIRST
et num_sync égal à 1. Par exemple, FIRST 1 (s1, s2)
et s1, s2
ont la même signifiation : soit s1
soit s2
est choisit comme serveur secondaire synchrone.
L'entrée spéciale *
correspond à tout nom de standby.
Il n'existe pas de mécanisme pour forcer l'unicité des noms de standby. Dans le cas de noms en double, un des standbys concernés sera considéré d'une priorité plus haute mais il n'est pas possible de prévoir lequel.
Chaque nom_standby doit avoir la forme d'un identifiant SQL valide, sauf si *
est utilisé. Vous pouvez utiliser des guillemets doubles si nécessaire mais notez que les nom_standby sont comparés au nom d'application des standbys sans faire attention à la casse, qu'ils aient des guillemets doubles ou non.
Si aucun nom de serveur en standby synchrone n'est indiqué ici, alors la réplication synchrone n'est pas activée et la validation des transactions n'attendra jamais la réplication. Ceci est la configuration par défaut. Même si la réplication synchrone est activée, les transactions individuelles peuvent être configurées pour ne pas avoir à attendre la réplication en configurant le paramètre synchronous_commit à local
ou off
.
Ce paramètre peut seulement être configuré dans le fichier postgresql.conf ou sur la ligne de commande du serveur.
Recommandations [EN]
Sur StackOverflow
Sur pgsql-hackers
- Allow logical failover slots to wait on synchronous replication
- Resetting synchronous_standby_names can wait for CHECKPOINT to finish
- RE: Resetting synchronous_standby_names can wait for CHECKPOINT to finish
- Re: logical decoding and replication of sequences, take 2
- Re: speed up a logical replica setup