Re: setting time zone in a function

From: Steve Rogerson <steve(dot)pg(at)yewtc(dot)demon(dot)co(dot)uk>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: setting time zone in a function
Date: 2016-04-21 15:03:56
Message-ID: 5718EBDC.6040805@yewtc.demon.co.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 21/04/16 14:47, Tom Lane wrote:
> Steve Rogerson <steve(dot)pg(at)yewtc(dot)demon(dot)co(dot)uk> writes:
>> I want the time zone if a function a bit like ...
>> CREATE OR REPLACE FUNCTION
>> short_name (timestamp with time zone, varchar) RETURNS varchar AS $$
>> DECLARE
>> ...
>> BEGIN
>> SET LOCAL TIME ZONE $2;
>
> Nope, that won't work: in general you can't put parameters into
> utility commands. Use set_config():
>

That works. Thanks.

> PERFORM set_config('timezone', $2, true);
>
> Also, I think "SET LOCAL" has transaction duration, not function duration,
> so you're going to have to work harder than this if you want the setting
> to be local to this function. SET LOCAL/set_config(true) inside an
> exception block might work --- and you may well want an exception block
> anyway, to trap bad timezone names. Or you could explicitly save and
> restore the previous setting, which is more code but might be faster
> than an exception block.

I wonder what counts as a valid time zone, I wasn't expecting this:

# set timezone = '==2.77';
SET
# select now();
now
-------------------------------
2016-04-18 09:40:52.089375-77
(1 row)

In my context I'm expecting an Olson type designation, "Europe/Madrid", I
guess that's hard to check for. I *think* I can live with the consequences, or
rather let a higher level deal with the problem. I would consider the above
time zone to be invalid.

Steve

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Adrian Klaver 2016-04-21 15:08:48 Re: Add relcreated (timestamp) column to pg_class catalog to record the time an object was created
Previous Message Melvin Davidson 2016-04-21 14:53:26 Re: Add relcreated (timestamp) column to pg_class catalog to record the time an object was created