SLONIK SET ADD TABLE

SET ADD TABLE — Ajoute une table dans un ensemble de réplication Slony-I

Synopsis

SET ADD TABLE (options);

Description

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

SET ID = ival

Identifiant de l'ensemble dans lequel la table doit être ajoutée.

ORIGIN = ival

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.

ID = ival

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.

FULLY QUALIFIED NAME = 'string'

Le nom complet de la table tel que décrit dans SLONIK TABLE ADD KEY(7).

KEY = { 'string' | SERIAL }

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

COMMENT = 'string'

Un texte décrivant la table.

Cette commande utilise schemadocsetaddtable( integer, integer, text, name, text ).

Exemple

SET ADD TABLE (
    SET ID = 1,
    ORIGIN = 1,
    ID = 20,
    FULLY QUALIFIED NAME = 'public.tracker_ticket',
    COMMENT = 'Ticket de Support'
);
    

Messages d'erreur

Voici quelque messages d'erreurs que vous rencontrerez en cas d'utilisation incorrecte :

Slony-I: setAddTable_int: table public.ma_table PK column id nullable

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.

Slony-I: setAddTable_int: table id 14 has already been assigned!

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

Slony-I: setAddTable_int(): table public.ma_table has no index mt_idx_14

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.

Slony-I: setAddTable_int(): table public.ma_table not found

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.

Slony-I: setAddTable_int(): public.ma_vue is not a regular table

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

Slony-I: setAddTable_int(): set 4 not found

Vous devez défini l'ensemble de réplication avant de lui assigner des tables.

Slony-I: setAddTable(): set 4 has remote origin

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: cannot add table to currently subscribed set 1

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

Utilisation de verrous

Sur le nœud origine, cette opération demande un verrou exclusif très bref sur la table afin de lui ajouter les triggers de réplication. Sur les nœuds abonnés, les verrous correspondant sont réalisés au moment de l'événement SUBSCRIBE_SET.

Note de version

Cette commande fut introduite dans Slony-I™ 1.0.