>
> Consegui resolver da seguinte forma:
>
>                 BETWEEN
>                     ''' || date_start || '''
>                 AND
>                     ''' || date_end || '''
>


Não, nunca concatene dados para formar comandos (especialmente do lado da
aplicação). É assim que sql injections nascem e você só descobre quando já
é tarde demais. Mas se você insistir nisso, então pelo menos use a função
quote_nullable (ou pode usar quote_literal se tiver alguma garantia de not
null na origem do dado, como é o caso de date_start):

     [...] BETWEEN ' || quote_literal(date_start) || ' AND ' ||
quote_nullable(date_end) || ' [...]

Mas o que você realmente quer é colocar essas variáveis na cláusula USING
do EXECUTE [1]:

    EXECUTE $ex1$ COPY ( [...] WHERE logtime BETWEEN $1 and $2 ) [...]
$ex1$ USING date_start, date_end;

Ou com format [2]:

    EXECUTE format($fmt1$ COPY ( [...] WHERE logtime BETWEEN %L AND %L
[...] $fmt1$, date_start, date_end);

E domine o dollar quoting [3], que é o recomendado [4], assim você não se
perde em blocos grandes e aninhados e tudo fica mais legível.

[1]
https://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN
[2]
https://www.postgresql.org/docs/current/static/functions-string.html#FUNCTIONS-STRING-FORMAT
[3]
https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING
[4]
https://www.postgresql.org/docs/current/static/plpgsql-development-tips.html#PLPGSQL-QUOTE-TIPS

Boa sorte
-- 

Arthur Nascimento - tureba
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a