1. ホーム

[解決済み】PostgreSQLでUTCの現在時刻をデフォルト値として使用する。

2022-04-20 17:34:33

質問

のカラムがあります。 TIMESTAMP WITHOUT TIME ZONE タイプで、デフォルトをUTCの現在時刻にしたいと思います。UTCの現在時刻を取得するのは簡単です。

postgres=# select now() at time zone 'utc';
          timezone          
----------------------------
 2013-05-17 12:52:51.337466
(1 row)

カラムに現在のタイムスタンプを使用するのと同様です。

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...

解決方法は?

関数は必要ありません。デフォルトの式を括弧で囲むだけです。

create temporary table test(
    id int, 
    ts timestamp without time zone default (now() at time zone 'utc')
);