Re: Replicacion?

From: cbeltran <cbeltran(at)roldan(dot)net>
To: Pablo Marrero <pablo(dot)marrero(at)bancaqm(dot)com(dot)uy>, Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>, AyudaPostgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Replicacion?
Date: 2004-09-08 21:48:40
Message-ID: 005e01c495ed$9a695a80$272615ac@tania
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Pablo

Como vas con la replica?

Con las indicaciones de Alvaro ya tenemos una nueva version (una sola
funcion con un solo trigger por tabla en replica) asi:

CREATE SEQUENCE tablas_replica_id_seq start 180000001 increment 1 maxvalue
999999999 minvalue 1 cache 1;
CREATE TABLE tablas_replica (
tablas_replica_id integer DEFAULT nextval('tablas_replica_id_seq'::text)
NOT NULL,
tabla_nombre_replica character(90) NOT NULL,
CONSTRAINT pk_tablas_replica PRIMARY KEY (tablas_replica_id)
);

INSERT INTO tablas_replica (tablas_replica_id, tabla_nombre_replica) VALUES
(180000001, 'terceros
');

CREATE SEQUENCE control_replica_id_seq start 180000000000000001 increment 1
maxvalue 999999999999999999 minvalue 1 cache 1 ;
CREATE TABLE control_replica (
control_replica_id bigint DEFAULT
nextval('control_replica_id_seq'::text) NOT NULL,
tablas_replica_id integer NOT NULL,
linea_tabla_replica_id bigint NOT NULL,
operacion character(6),
CONSTRAINT pk_control_replica PRIMARY KEY (control_replica_id),
CONSTRAINT fk_tablas_replica_id1 FOREIGN KEY (tablas_replica_id)
REFERENCES tablas_replica(tablas_replica_id) ON UPDATE CASCADE ON DELETE
CASCADE
);

CREATE FUNCTION "rp_terceros"() RETURNS TRIGGER AS '
BEGIN
IF TG_OP = ''DELETE'' THEN
INSERT INTO control_replica (tablas_replica_id,
linea_tabla_replica_id, operacion) VALUES (180000001, OLD.terceros_id,
TG_OP);
ELSE
INSERT INTO control_replica (tablas_replica_id, linea_tabla_replica_id,
operacion) VALUES (180000001, NEW.terceros_id, TG_OP);
END IF;
RETURN NEW;
END;
' LANGUAGE 'plpgsql';
CREATE TRIGGER rp_terceros BEFORE INSERT OR UPDATE OR DELETE ON terceros FOR
EACH ROW EXECUTE PROCEDURE rp_terceros();

Es decir la operacion (INSERT / UPDATE / DELETE) se toma directamente de
TG_OP y por lo tanto cambio el tipo a character(6) y ademas en la funcion
hubo que agregar un IF pues se debe especificar la linea OLD para DELETE y
la linea NEW para INSERT y UPDATE.

Carlos Beltran Villamizar
Roldan SIA SA Colombia.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Patricio Muñoz 2004-09-08 22:06:11 Re: Stored Procedures en PostGres
Previous Message Correo etb 2004-09-08 21:27:51 Re: Stored Procedures en PostGres