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