Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Seguinte galera, preciso fazer uma função que replique o dado em uma outra base de um outro ip, pra isso estou usando o dblink. Consegui desenvolver todas as operações, mas o grande problema agora é como especificar a replicação na trigger. Se puderem me ajudar ficarei grato, abraços.
-- CRIANDO TABELA clientesa no BANCO_A para replicação
CREATE TABLE clientes (
id_cliente integer,
nome varchar,
telefone varchar,
dt_cad varchar
);
-- Criada a função com retorno 'tipo' trigger para a replicação
CREATE OR REPLACE FUNCTION testdblink() RETURNS TRIGGER AS
$testdblink$
BEGIN
-- Escolha da opção SELECT no banco B cujo IP é = 127.0.0.1
IF ( TG_OP = 'SELECT') THEN
SELECT * FROM DBLINK
('dbname=banco_b
hostaddr = 127.0.0.1
user = postgres
password = eve123
port=5432', 'select*from clientes')
as func2 (id_cliente varchar,
nome varchar,
telefone varchar,
dt_cad varchar);
RETURN NEW;
-- Escolha da opção INSERT no banco B cujo IP é = 127.0.0.1
ELSE IF (TG_OP = 'INSERT') THEN
SELECT dblink_exec
('dbname=banco_b
hostaddr = 127.0.0.1
user = postgres
password = 123456
port=5432',
'INSERT INTO CLIENTES (id_cliente, nome, telefone, dt_cad)
VALUES
('new.id_cliente', 'new.nome', 'new.telefone', 'new.dt_cat'');
RETURN NEW;
-- Escolha da opção UPDATE no banco A cujo IP é = 127.0.0.1
ELSE IF ( TG_OP = 'UPDATE' ) THEN
SELECT dblink_exec
('dbname=banco_b
hostaddr = 127.0.0.1
user = postgres
password = 123456
port=5432',
'UPDATE clientes SET' id_cliente=new.id_cliente' , 'nome= new.nome', 'telefone= new.telefone ',' dt_cad = now() 'WHERE' id_cliente = new.id_cliente'');
RETURN NEW;
-- Escolha da opção DELETE no banco B cujo IP é = 127.0.0.1
ELSE IF ( TG_OP = 'DELETE') THEN
SELECT dblink_exec
('dbname=banco_b
hostaddr = 127.0.0.1
user = postgres
password = 123456
port=5432',
'DELETE from CLIENTES WHERE' id_cliente = old.id_cliente '');
RETURN OLD;
END IF;
RETURN NEW;
END;
$testdblink$ language plpgsql;
-- Objeto trigger criado na tabela clientesa no banco_a para replicação em clientes no banco_b;
CREATE TRIGGER testedblink AFTER SELECT OR INSERT OR UPDATE OR DELETE ON clientesa
FOR EACH ROW EXECUTE PROCEDURE testedblink();
--################## SELECT FROM DBLINK DATABASE_B ##############--
SELECT * FROM DBLINK
('dbname=banco_b
hostaddr = 127.0.0.1
user = postgres
password = eve123
port=5432', 'select*from clientes')
as func2 (id_cliente varchar,
nome varchar,
telefone varchar,
dt_cad varchar);
--################## INSERT FROM DBLINK DATABASE_B ##############--
SELECT dblink_exec
('dbname=banco_b
hostaddr = 127.0.0.1
user = postgres
password = 123456
port=5432',
'INSERT INTO CLIENTES (id_cliente, nome, telefone, dt_cad)
VALUES
(3, ''testeINSERT'', ''(19)8185_7508'', now())');
--################## UPDATE FROM DBLINK DATABASE_B ##############--
SELECT dblink_exec
('dbname=banco_b
hostaddr = 127.0.0.1
user = postgres
password = 123456
port=5432',
'UPDATE clientes SET id_cliente=5, nome=''TOUM'', telefone=''(20)2020-2020'', dt_cad=now() WHERE id_cliente = 3');
--################## DELETE FROM DBLINK DATABASE_B ##############--
SELECT dblink_exec
('dbname=banco_b
hostaddr = 127.0.0.1
user = postgres
password = 123456
port=5432',
'DELETE from CLIENTES WHERE nome = ''Everton''');Carregando comentários...