From: | Patrick B <patrickbakerbr(at)gmail(dot)com> |
---|---|
To: | "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com> |
Cc: | rob stone <floriparob(at)gmail(dot)com>, Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>, pgsql-general <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Plpgsql - Custom fields Postgres 9.5 |
Date: | 2016-12-15 01:19:52 |
Message-ID: | CAJNY3ivke9jL6wX6F=5dF5XuaC9ibT4Yh96DYeWrGWF+tPiMog@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
2016-12-15 14:00 GMT+13:00 David G. Johnston <david(dot)g(dot)johnston(at)gmail(dot)com>:
> On Wed, Dec 14, 2016 at 5:12 PM, rob stone <floriparob(at)gmail(dot)com> wrote:
>
>>
>> On Wed, 2016-12-14 at 17:00 -0700, David G. Johnston wrote:
>> > On Wed, Dec 14, 2016 at 4:49 PM, Patrick B <patrickbakerbr(at)gmail(dot)com>
>> > wrote:
>> > > ERROR: function logextract(integer, integer) does not exist
>> > > LINE 1: select logextract(20160901,20161001);
>> > >
>> >
>> > So change the constants you are passing into your function to text
>> > (i.e., surrounding them with single quotes) so it matches the new
>> > function signature.
>> >
>> > There exists an element of understanding the options you are being
>> > given and adapting if something basic like this is overlooked.
>> >
>> > David J.
>>
>>
>> 1) Have you run a \df+ and made sure the function has been created
>> correctly?
>>
>
> It was created originally using integer arguments - and thus was being
> called that way. It was intentionally changed to use "text" arguments per
> a suggestion but without any recognition that the call site needed to
> change as well - hence the error. Running \df+ would give the expected
> output. What could be a problem is if the original function wasn't dropped
> so while the text arg'd one was created the actual call would still
> reference the old int arg'd version and any changes would not appear to
> have been made.
>
>
>> 2) In your first post there is a single apostrophe after the execute
>> instruction. Can't see the closing apostrophe but then my eyesight is
>> not the best.
>>
>
> I'd recommend using the "format" function but last time I did that the
> person I way trying to help got mad...
>
>
>> 3) I've always found it easier to TO_CHAR a date column when using it
>> for comparison purposes.
>>
>
> I'm not following this "use text" approach at all...I get the logistics
> but PostgreSQL allows for comparison of date typed data...
>
> David J.
>
>
I've done:
1. Deleted all the functions;
2. Created a new function:
CREATE or REPLACE FUNCTION l_extract(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';
3. Calling the function:
select l_extract('20160901');
select l_extract('2016-09-01'); --> doesn't work either
4. Error:
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.
QUERY:
COPY
(
SELECT
uuid,
clientid,
*
FROM
logging
WHERE
logtime
BETWEEN
2016-12-15
AND
20160901
)
TO '/var/lib/postgresql/2016-12-15_logs.csv'
CONTEXT: PL/pgSQL function iknock_log_extract(text) line 7 at EXECUTE
5. \d+ logging:
log_time | timestamp(3) without time zone
6. Query below works:
SELECT
uuid,
clientid,
*
FROM
logging
WHERE
logtime
BETWEEN
'2016-12-15'
AND
'20160901'
Still can't understand what's going on =\
From | Date | Subject | |
---|---|---|---|
Next Message | armand pirvu | 2016-12-15 01:29:03 | Re: Plpgsql - Custom fields Postgres 9.5 |
Previous Message | David G. Johnston | 2016-12-15 01:00:29 | Re: Plpgsql - Custom fields Postgres 9.5 |