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