Re: Replica / Sincronizacion

Lists: pgsql-es-ayuda
From: cbeltran <cbeltran(at)roldan(dot)net>
To: AyudaPostgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Replica / Sincronizacion
Date: 2004-11-23 13:32:34
Message-ID: 013601c4d160$e3f58300$272615ac@tania
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Actualmente, tenemos replica funcionando desde 12 servidores hacia un servidor central con base en un trigger y su respectiva funcion por cada tabla replicada, que actualiza una tabla de control, para luego desde el servidor central (via un agente, en un loop permanente, de nivel 3 en background) accesar dicha tabla y actualizar la base central que se convierte en la union de todas las bases distribuidas en los doce servidores. Es importante confirmar la gran fortaleza de postgres para estos fines.

Sin embargo, ahora necesitamos sincronizar desde el servidor central ciertas lineas de tablas (maestras operativas) que han sido actualizadas(INSERT/UPDATE/DELETE) en alguno de los servidores y deben ser actualizados en los demas servidores. Y se hace imperativo hacer una operacion similar (INSERT/UPDATE/DELETE) en los once servidores restantes (a excepcion del servidor fuente de la operacion).

Por lo tanto debemos inhibir el trigger de la operacion de una linea de sincronizacion para que esta operaciĆ³n no genere una nueva replica de dicha linea en cada uno de los servidores.

Es decir, como se inhibe o se desactiva un trigger solo para una operacion especifica(INSERT/UPDATE/DELETE) y que todas las demas fruto de la operacion si sigan activando dicho trigger?

Gracias a toda la lista interesada en estos temas, y en particular a Alvaro, quien con sus tips ha hecho evolucionar nuestra actual solucion.

Carlos Beltran V.
Roldan SIA SA Bogota, Colombia.


From: Manuel Sugawara <masm(at)fciencias(dot)unam(dot)mx>
To: cbeltran <cbeltran(at)roldan(dot)net>
Cc: AyudaPostgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Replica / Sincronizacion
Date: 2004-11-23 17:21:41
Message-ID: m34qjgeb16.fsf@conexa.fciencias.unam.mx
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

cbeltran <cbeltran(at)roldan(dot)net> writes:

> Es decir, como se inhibe o se desactiva un trigger solo para una operacion
> especifica(INSERT/UPDATE/DELETE) y que todas las demas fruto de la
> operacion si sigan activando dicho trigger?

Puedes hacer algo como lo que hace pg_dump:

BEGIN;
-- desactivamos los triggers
UPDATE pg_catalog.pg_class SET reltriggers = 0 WHERE oid = 'nombre-tabla'::pg_catalog.regclass;

actualizaciones sobre nombre-tabla ...

-- activamos los triggers sobre nombre-tabla
UPDATE pg_catalog.pg_class SET reltriggers = (SELECT pg_catalog.count(*) FROM pg_catalog.pg_trigger where pg_class.oid = tgrelid) WHERE oid = 'nombre-tabla'::pg_catalog.regclass;
COMMIT;

Saludos,
Manuel.


From: cbeltran <cbeltran(at)roldan(dot)net>
To: Manuel Sugawara <masm(at)fciencias(dot)unam(dot)mx>, AyudaPostgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Replica / Sincronizacion
Date: 2004-11-23 21:23:09
Message-ID: 000b01c4d1a2$a18e9640$272615ac@tania
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Manuel,

Mil y Mil Gracias por la solucion y solo pregunto donde puedo encontrar
detalles de diseno y comportamiento de las tablas pg_*.

Carlos.

----- Original Message -----
From: "Manuel Sugawara" <masm(at)fciencias(dot)unam(dot)mx>
To: "cbeltran" <cbeltran(at)roldan(dot)net>
Cc: "AyudaPostgres" <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Tuesday, November 23, 2004 12:21 PM
Subject: Re: [pgsql-es-ayuda] Replica / Sincronizacion

> cbeltran <cbeltran(at)roldan(dot)net> writes:
>
> > Es decir, como se inhibe o se desactiva un trigger solo para una
operacion
> > especifica(INSERT/UPDATE/DELETE) y que todas las demas fruto de la
> > operacion si sigan activando dicho trigger?
>
> Puedes hacer algo como lo que hace pg_dump:
>
> BEGIN;
> -- desactivamos los triggers
> UPDATE pg_catalog.pg_class SET reltriggers = 0 WHERE oid =
'nombre-tabla'::pg_catalog.regclass;
>
> actualizaciones sobre nombre-tabla ...
>
> -- activamos los triggers sobre nombre-tabla
> UPDATE pg_catalog.pg_class SET reltriggers = (SELECT pg_catalog.count(*)
FROM pg_catalog.pg_trigger where pg_class.oid = tgrelid) WHERE oid =
'nombre-tabla'::pg_catalog.regclass;
> COMMIT;
>
> Saludos,
> Manuel.


From: Manuel Sugawara <masm(at)fciencias(dot)unam(dot)mx>
To: cbeltran <cbeltran(at)roldan(dot)net>
Cc: AyudaPostgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Replica / Sincronizacion
Date: 2004-11-23 23:17:32
Message-ID: m3vfbwb1f7.fsf@conexa.fciencias.unam.mx
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

cbeltran <cbeltran(at)roldan(dot)net> writes:

> Manuel,
>
> Mil y Mil Gracias por la solucion y solo pregunto donde puedo encontrar
> detalles de diseno y comportamiento de las tablas pg_*.

En la documentaciĆ³n oficial de PostgreSQL hay algo:

http://www.postgresql.org/docs/7.4/static/catalogs.html

Saludos,
Manuel.