Saludos

Tengo que implementar un sistema de replicación. Aún estamos definiendo,
pero en principio va 1 principal en la sede, 2 esclavos en la sede (comor
espaldos), 2 en 2 sucursales (1 en cada una).

He ido mirando y probando a partir de un material de Alvaro sobre Slony, y
la documentación oficial. Hasta ahora, probé con 2 tablas y funcionó, pero
cuando metí otra me tiró error. El scritp
 sh local2.sh :
#!/bin/sh
slonik <<_EOF_

    cluster name = encuentro;
    node 1 admin conninfo = 'dbname=sir user=slony password=slony';
    node 2 admin conninfo = 'host=192.168.0.12 dbname=sir user=slony
password=slony';

    create set (id=1, origin=1, comment='tablas del Encuentro Código
Político');
    set add table (set id=1, origin=1, id=1, full qualified
name='public.region');
    set add sequence (set id=1, origin=1, id=1, full qualified
name='public.region_reg_001_seq');

    set add table (set id=1, origin=1, id=2, full qualified
name='public.estado');
    set add sequence (set id=1, origin=1, id=2, full qualified
name='public.estado_est_001_seq');

    set add table (set id=1, origin=1, id=3, full qualified
name='public.municipio');
    set add sequence (set id=1, origin=1, id=3, full qualified
name='public.municipio_id_seq');

    echo 'Se ha creado el set 1 con la tabla de Region y Estado';

    subscribe set (id=1, provider=1, receiver=2, forward=yes);
    echo 'El nodo 2 esta suscrito al set 1, proveedor es nodo 1';

_EOF_

El error:
<stdin>:6: PGRES_FATAL_ERROR select "_encuentro".storeSet(1, 'tablas del
Encuentro Código Político');  - ERROR:  llave duplicada viola restricción de
unicidad «sl_set-pkey»
CONTEXT:  sentencia SQL: «insert into "_encuentro".sl_set (set_id,
set_origin, set_comment) values ( $1 ,  $2 ,  $3 )»
PL/pgSQL function "storeset" line 13 at SQL statement

Con las tablas region y estado, funciona perfecto! al meter municipios me
salta el erro. Sin emabrgo, al tabla municipios tiene tan sólo 77 registros.
He hecho una consulta y no hay valores nulos ni duplicados, de hecho, la
estructura:
CREATE TABLE municipio (
    reg_001 character varying(2) NOT NULL,
    est_001 character varying(2) NOT NULL,
    mun_001 character varying(2) NOT NULL,
    mun_002 character varying(35) NOT NULL,
    id integer NOT NULL
);


ALTER TABLE public.municipio OWNER TO carbonara;

CREATE SEQUENCE municipio_id_seq
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;

ALTER TABLE public.municipio_id_seq OWNER TO carbonara;

ALTER SEQUENCE municipio_id_seq OWNED BY municipio.id;

ALTER TABLE municipio ALTER COLUMN id SET DEFAULT
nextval('municipio_id_seq'::regclass);

ALTER TABLE ONLY municipio
    ADD CONSTRAINT municipio_pkey PRIMARY KEY (id);

ALTER TABLE ONLY municipio
    ADD CONSTRAINT municipio_ukey UNIQUE (reg_001, est_001, mun_001);

ALTER TABLE ONLY municipio
    ADD CONSTRAINT estado_fkey FOREIGN KEY (reg_001, est_001) REFERENCES
estado(reg_001, est_001) ON UPDATE CASCADE ON DELETE RESTRICT;

Algún comentario?
-- 
--
Sí no eres parte de la solución... eres parte del problema.
Les Luthiers
--
... y no dejes de leer:
Netiqueta: Conjunto de reglas que regulan la conducta del usuario en
internet
http://es.wikibooks.org/wiki/Netiquette
-- 
Cesar A. Carbonara R.
C.I. Nº V.11.952.572
--
Usuario Linux 377997
www.gulmer.org.ve

Responder a