Re: setting time zone in a function

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

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():

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.

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Adrian Klaver 2016-04-21 13:50:19 Re: error while installing auto_explain contrib module
Previous Message Melvin Davidson 2016-04-21 13:40:18 Re: Add relcreated (timestamp) column to pg_class catalog to record the time an object was created