Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Everton.

[Resolvido] Função + Dblink

Recommended Posts

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''');


Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.