SET ADD TABLE — Ajoute une table dans un ensemble de réplication Slony-I™
SET ADD TABLE (options);
Ajoute une table existante dans un ensemble de réplication. L'ensemble ne doit pas être répliqué sur un autre nœud, cette fonctionnalité est assurée par la commande SLONIK MERGE SET(7).
Identifiant de l'ensemble dans lequel la table doit être ajoutée.
Nœud origine de l'ensemble. Nous pourrions imaginer une prochaine version de slonik en devinant cette information par lui-même, mais il y a des race conditions.
Identifiant unique de la table. Ces identifiants ne sont pas seulement utilisés pour désigner une table dans l'ensemble de réplication. Cette valeur numérique détermine également l'ordre de verrouillage des tables, notamment lors de la commande SLONIK LOCK SET(7). Cet identifiant doit donc suivre une certaine hiérarchie afin que les scripts slonik ne provoquent de situation d'inter-blocage (« deadlocks »).
Cet identifiant doit être unique pour tous les ensembles de réplication ; vous ne devez pas avoir deux tables du même cluster avec le même identifiant.
Notez que Slony-I™ génère un tableau en mémoire indiquant tous les noms de table complètement qualifiés ; si vous utilisez des gros numéros d'identifiant pour les tables, le tableau peu utilisé peut amener des pertes substantiels de mémoire. Chaque identifiant de table potentiel consomme un pointeur vers un caractère, ce qui fait habituellement quatre octets par identifiants de table sur les architectures 32 bits et 8 octets sur les architectures 64 bits.
Le nom complet de la table tel que décrit dans SLONIK TABLE ADD KEY(7).
(Facultatif) Le nom de l'index relatif à la colonne unique et NOT NULL qui est utilisée comme identifiant de ligne lors de la réplication. Si le mot-clef SERIAL est utilisé, cela indique qu'il faut utiliser la colonne spéciale ajoutée avec la commande SLONIK TABLE ADD KEY(7). Par défaut, on utilise la clef primaire de la table. Le nom de l'index n'est pas un nom complet ; vous devez omettre le schéma.
Un texte décrivant la table.
Cette commande utilise schemadocsetaddtable( integer, integer, text, name, text ).
SET ADD TABLE (
SET ID = 1,
ORIGIN = 1,
ID = 20,
FULLY QUALIFIED NAME = 'public.tracker_ticket',
COMMENT = 'Ticket de Support'
);
Voici quelque messages d'erreurs que vous rencontrerez en cas d'utilisation incorrecte :
Les clefs primaires (ou les clefs candidates) doivent être composées de colonnes NOT NULL. Si vous avez une clef primaire candidate dont une colonne n'est pas déclarée ainsi, alors Slony-I™ rejettera la table et produira ce message.
L'identifiant de la table, stocké dans sl_table.tab_id, doit être unique pour tous les nœuds/tables/ensembles. Ce message indique que vous avez tenté de déclarer un identifiant qui est déjà utilisé.
Ceci se produit en général avec les clefs primaires candidates ; le message indique que l'index spécifié n'est pas disponible sur ce nœud.
Pire que l'absence d'un index, c'est la table qui est manquante. Le message indique que le processus que vous avez utilisé pour mettre en place le schéma n'a pas fonctionné correctement.
Vous ne pouvez répliquer que des tables (en tout cas avec SET ADD TABLE). Cela n'inclut pas les vues et les index (les index sont répliqués de facto, mais on peut pas demander explicitement la réplication d'un index).
Vous devez défini l'ensemble de réplication avant de lui assigner des tables.
Ceci se produit lorsque l'ensemble de réplication #4 est configuré sur une origine, le nœud 1, et que vous lancez une commande SET ADD TABLE qui spécifie un autre nœud que le nœud 1. Ceci se produit généralement lorsque la configuration admin conninfo est confuse à l'intérieur du préambule du script slonik...
Slony-I™ ne peut pas ajouter des tables dans un ensemble qui est en cours de réplication. À la place, vous devez définir un nouvel ensemble de réplication puis ajouter toutes les nouvelles tables à cet ensemble. Vous pouvez ensuite utiliser SLONIK MERGE SET(7) pour fusionner le nouvel ensemble avec un ensemble existant, si cela vous semble approprié.