Re: Deshabilitar triggers

From: cbeltran <cbeltran(at)roldan(dot)net>
To: Juan Manuel Rios <juanmanuelrios(at)gmail(dot)com>
Cc: AyudaPostgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Deshabilitar triggers
Date: 2005-04-11 12:37:01
Message-ID: 002701c53e93$29b6fd20$272615ac@tania
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Juan Manuel

Para asegurar el desactivado del trigger se debe definir la transacción asi:

function sincroniza_linea_tabla($ptabla_nombre, $plinea_sql) {
global $data_h, $sinc_sql;
$this->db->query("BEGIN WORK");
$pg_sql = "UPDATE pg_catalog.pg_class SET reltriggers = 0 WHERE oid =
'$ptabla_nombre'::pg_catalog.regclass";
$rta = $this->db->query($pg_sql);
if(DB::isError($rta)) {
$this->db->query("ROLLBACK");
echo "$pg_sql";
$subtitulo="INCONSISTENCIA DB DESACTIVANDO TRIGGER EN
sincroniza_linea_tabla DE $ptabla_nombre";
$data_h->mensaje($subtitulo);
exit();
}
$sinc_sql = $plinea_sql;
$rta = $this->db->query($sinc_sql);
if(DB::isError($rta)) {
$this->db->query("ROLLBACK");
return false;
}
$pg_sql = "UPDATE pg_catalog.pg_class SET reltriggers = (SELECT
pg_catalog.count(*) FROM pg_catalog.pg_trigger WHERE pg_class.oid=tgrelid)
WHERE oid = '$ptabla_nombre'::pg_catalog.regclass";
$rta = $this->db->query($pg_sql);
if(DB::isError($rta)) {
$this->db->query("ROLLBACK");
echo "$pg_sql";
$subtitulo="INCONSISTENCIA DB REACTIVANDO TRIGGER EN
sincroniza_linea_tabla DE $ptabla_nombre";
$data_h->mensaje($subtitulo);
exit();
}
$this->db->query("COMMIT");
return true;
}

En la anterior funcion se usa DB de PEAR en PHP y los parametros
$ptabla_nombre y $plinea_sql que es una cadena con la sentencia SQL
(UPDATE/INSERT/DELETE). indudablemente el BEGIN - COMMIT (o ROLLBACK en caso
de error) asegura la atomicidad y el consecuente aislamiento (solo para esa
sesion) de la transacción. Como politica no se permite UPDATE (en la misma
función del trigger) de la columna primary key. Indudablemente queda la duda
con respecto a si afecta a las demas tablas por ejemplo en un DELETE que
implique borrados de otras tablas via foreign key. (En nuestro caso los
borrados de lineas de tablas sincronizables son practicamente inexistentes).

Gracias por el interes en estos temas determinantes en los enfoques de
almacenamiento distribuido pero fuertemente centralizado en un servidor
(consolidacion de data via replica/sincronizacion).

Carlos Beltrán Villamizar
Roldán SIA SA Colombia

----- Original Message -----
From: "Juan Manuel Rios" <juanmanuelrios(at)gmail(dot)com>
To: "cbeltran" <cbeltran(at)roldan(dot)net>
Sent: Friday, April 08, 2005 10:36 AM
Subject: Re: [pgsql-es-ayuda] Deshabilitar triggers

Gracias Carlos por tu pronta respuesta. Tu lo has probado ?
Tengo la duda de si la deshabilitacion temporal se produce solo para
la sesion en curso o afecta a las demas tablas ? De todas maneras se
podria evitar que se produzcan inserciones en la tabla en otra sesion
que requiera que el trigger este habilitado mediante el lockeo de la
tabla correspondiente por el tiempo que demande la operacion que
necesita deshabilitar los triggers. Si alguien tiene alguna
observacion sobre esto, por favor, me gustaria escucharla.

Muchas gracias.

On Apr 7, 2005 7:22 PM, cbeltran <cbeltran(at)roldan(dot)net> wrote:
> Juan Manuel
>
> Pregunté exactamente lo mismo. Revisa el siguiente link
>
> http://archives.postgresql.org/pgsql-es-ayuda/2004-11/msg00454.php
>
> Carlos Beltrán Villamizar
> Roldán SIA SA Colombia
>
> ----- Original Message -----
> From: "Juan Manuel Rios" <juanmanuelrios(at)gmail(dot)com>
> To: <pgsql-es-ayuda(at)postgresql(dot)org>
> Sent: Thursday, April 07, 2005 4:20 PM
> Subject: [pgsql-es-ayuda] Deshabilitar triggers
>
> > Hola a todos.
> >
> > Quisiera saber si existe alguna instruccion en postgres que me permita
> > deshabilitar la ejecucion de los triggers de una tabla en forma
> > temporal mientras ejecuto una secuencia de actualizaciones y luego
> > volverlos a habilitar.
> > He visto que el comando pg_restore tiene una opcion para hacerlo pero
> > yo necesitaria hacerlo programaticamente.
> >
> > Muchas gracias.
> >
> > ---------------------------(fin del mensaje)---------------------------
> > TIP 4: No hagas 'kill -9' a postmaster
>
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jose Stragnari 2005-04-11 13:41:15 RE: Necesito ayuda para representar un arbol
Previous Message Jessie Cordoba 2005-04-11 11:50:07 ARCHIVO LOG