Matheus,

funcionou perfeitamente o modo de escape que voce indicou. Obrigado


Em 8 de novembro de 2013 22:14, Eduardo Rodrigues <
eduardo.rodrig...@wisetelecom.com.br> escreveu:

> Matheus,
> Obrigado pela dica irei testar o que você informou no email.
> Em 08/11/2013 17:23, "Matheus de Oliveira" <matioli.math...@gmail.com>
> escreveu:
>
>>
>>
>>
>> 2013/11/8 Eduardo Rodrigues <edua...@ookle.com.br>
>>
>>> Pessoal,
>>>
>>> utilizo o PostgreSQL 9.2 e quero replicar o conteúdo de uma tabela,
>>> levando em consideração a coluna recebimento que eh do tipo timestamp. No
>>> banco de dados online ficara armazenado apenas o período dos últimos 30
>>> dias, o que for maior do que 30 dias tenho que armazenar em um outro banco
>>> de dados. Entao pensei em utilizar o dblink,  criei uma instrução SQL que
>>> funciona normalmente. Mas quando a executo em uma function ela compila mas
>>> no momento de executar a mesma retorna erro, acredito que seja uma caso de
>>> escape que nao estou conseguindo solucionar.  Sera que alguém pode me
>>> ajudar?
>>>
>>> (...)
>>>
>>> *function*
>>>
>>>
>>>  CREATE OR REPLACE FUNCTION teste_reply()
>>>   RETURNS int4 AS
>>> $BODY$
>>> declare
>>>   condicao_where character varying(255);
>>>   value2 int4;
>>> begin
>>>
>>>    condicao_where := 'SELECT * FROM tabela where recebimento <
>>> date_trunc('second',timestamp 'now()')  - INTERVAL '30 day';
>>>
>>>
>> Nessa parte aqui (^^) você precisa fazer o escape das aspas simples, ou
>> então usar operador dólar:
>>
>> condicao_where := 'SELECT * FROM tabela where recebimento <
>> date_trunc(''second'', now())  - INTERVAL ''30 day'' ';
>>
>> ou
>>
>> condicao_where := $query$ SELECT * FROM tabela where recebimento <
>> date_trunc('second', now())  - INTERVAL '30 day' $query$;
>>
>>
>>    SELECT * FROM dblink('host=remote user=reply password=123
>>> dbname=database', condicao_where)
>>>      AS resultado(id bigint, user_id character varying(16), recebimento
>>> timestamp without time zone);) INTO value2;
>>>
>>
>> Esta parte também parece ter um erro, você está fazendo um "SELECT * "
>> mas jogando apenas numa variável "value2" que é um inteiro, você deveria
>> usar várias variáveis ou ainda um tipo RECORD.
>>
>>
>>
>>>     return value2;
>>>
>>> end;
>>> $BODY$
>>>   LANGUAGE plpgsql VOLATILE
>>>   COST 100;
>>>
>>
>>
>> Atenciosamente,
>> --
>> Matheus de Oliveira
>> Analista de Banco de Dados
>> Dextra Sistemas - MPS.Br nível F!
>> www.dextra.com.br/postgres
>>
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a