2016-12-15 13:38 GMT+13:00 Patrick B <patrickbake...@gmail.com>:

> Olá,
>
> Eu possuo a seguinte query:
>
> COPY (
>
> SELECT
>
>     uuid,
>
>     clientid,
>
>     *
>
> FROM
>
>     logging
>
> WHERE
>
>     logtime
>
> BETWEEN
>
>     '201611015'
>
> AND
>
>     '201612015' ) TO '/var/lib/postgresql/arquivo.csv';
>
>
> Esta query tem que ser manualmente rodada 1x por mês. Por esta razão,
> estou fazendo uma PLPGSQL function para que isso seja automatizado.
>
> CREATE or REPLACE FUNCTION lextract(date_end text)
>
> RETURNS void AS $$
>
>
> DECLARE
>
> date_start date := CURRENT_DATE;
>
>
> begin
>
>   execute '
>
>   COPY
>
>       (
>
>                 SELECT
>
>                     uuid,
>
>                     clientid,
>
>                     *
>
>                 FROM
>
>                     logging
>
>                 WHERE
>
>                     logtime
>
>                 BETWEEN
>
>                     ' || date_start || '
>
>                 AND
>
>                     ' || date_end || '
>
>       )
>
>   TO ''/var/lib/postgresql/'|| date_start ||'_logs.csv''';
>
> end
>
> $$ language 'plpgsql';
>
>
>
> Quando chamo a function, recebo este erro:
>
> select lextract('201611015');
>
> ERROR:  operator does not exist: timestamp without time zone >= integer
>
> LINE 13:                 BETWEEN
>
>                          ^
>
> HINT:  No operator matches the given name and argument type(s). You might
>> need to add explicit type casts.
>
>
> No que estou falhando? Obrigado!
>




Consegui resolver da seguinte forma:

                BETWEEN
                    ''' || date_start || '''
                AND
                    ''' || date_end || '''


Obrigado.
Patrick
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a