2013/11/12 Eduardo Rodrigues <edua...@ookle.com.br>

> Matheus,
>
> funcionou perfeitamente o modo de escape que voce indicou. Obrigado
>
>
Opa. Tranquilo.. =D




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


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

Responder a