Использование текущего времени в UTC в качестве значения по умолчанию в PostgreSQL
у меня есть столбец TIMESTAMP WITHOUT TIME ZONE
введите и хотел бы иметь это значение по умолчанию для текущего времени в UTC. Получить текущее время в UTC легко:
postgres=# select now() at time zone 'utc';
timezone
----------------------------
2013-05-17 12:52:51.337466
(1 row)
As использует текущую метку времени для столбца:
postgres=# create temporary table test(id int, ts timestamp without time zone default current_timestamp);
CREATE TABLE
postgres=# insert into test values (1) returning ts;
ts
----------------------------
2013-05-17 14:54:33.072725
(1 row)
но это использует местное время. Попытка заставить это UTC приводит к синтаксической ошибке:
postgres=# create temporary table test(id int, ts timestamp without time zone default now() at time zone 'utc');
ERROR: syntax error at or near "at"
LINE 1: ...int, ts timestamp without time zone default now() at time zo...
5 ответов
функция даже не требуется. Просто поставьте скобки вокруг выражения по умолчанию:
create temporary table test(
id int,
ts timestamp without time zone default (now() at time zone 'utc')
);
оберните его в функцию:
create function now_utc() returns timestamp as $$
select now() at time zone 'utc';
$$ language sql;
create temporary table test(
id int,
ts timestamp without time zone default now_utc()
);
насчет
now()::timestamp
Если ваша другая временная метка без часового пояса, то это приведение даст соответствующий тип "временная метка без часового пояса" для текущего времени.
Я хотел бы прочитать, что другие думают об этом варианте. Я все еще не верю в свое понимание этого" с/без " часового пояса.