PostgreSQLでCURRENT_TIMESTAMP関数とtimestamp with time zone型を使い分ける
PostgreSQLで現在時刻をUTCとしてデフォルト値として使用する方法
CURRENT_TIMESTAMP
関数は、現在の時刻をUTCで返します。この関数をデフォルト値として使用するには、次のようにします。
CREATE TABLE my_table (
id INT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
このコードは、my_table
というテーブルを作成します。このテーブルには、id
というINT型の主キーと、created_at
というTIMESTAMP型の列があります。created_at
列のデフォルト値は、CURRENT_TIMESTAMP
関数によって現在の時刻が設定されます。
timestamp with time zone
型は、タイムゾーン情報を含む時刻を表します。この型を使用するには、次のようにします。
CREATE TABLE my_table (
id INT PRIMARY KEY,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP AT TIME ZONE 'UTC'
);
- 常にUTCで時刻を保存したい場合は、
timestamp with time zone
型を使うべきです。 - 時々ローカルタイムで時刻を保存したい場合は、
CURRENT_TIMESTAMP
関数を使うべきです。
その他の注意事項
- PostgreSQLは、デフォルトでUTCを使用します。そのため、特にタイムゾーンを指定しなくても、現在の時刻はUTCで保存されます。
CURRENT_TIMESTAMP
関数は、現在の時刻をUTCで返しますが、タイムゾーン情報は含まれません。
-- テーブルの作成
CREATE TABLE my_table (
id INT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- データの挿入
INSERT INTO my_table (created_at) VALUES (CURRENT_TIMESTAMP);
-- データの取得
SELECT created_at FROM my_table;
このコードを実行すると、my_table
テーブルに現在の時刻がUTCで保存されます。
- PostgreSQLで現在時刻をローカルタイムとしてデフォルト値として使用するには、
CURRENT_TIMESTAMP
関数の代わりにLOCALTIMESTAMP
関数を使用します。
DEFAULT式を使用して、現在時刻をUTCとしてデフォルト値として設定できます。
CREATE TABLE my_table (
id INT PRIMARY KEY,
created_at TIMESTAMP DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC')
);
CREATE VIEW my_view AS
SELECT id, CURRENT_TIMESTAMP AT TIME ZONE 'UTC' AS created_at
FROM my_table;
INSERT INTO my_table (id) VALUES (1);
SELECT created_at FROM my_view;
トリガーを使用して、レコードが挿入される前に現在時刻をUTCとして設定できます。
CREATE TRIGGER my_trigger BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
NEW.created_at = CURRENT_TIMESTAMP AT TIME ZONE 'UTC';
END;
- シンプルな方法で現在時刻をUTCとしてデフォルト値として設定したい場合は、DEFAULT式を使うべきです。
- レコードが挿入される前に他の処理を実行したい場合は、トリガーを使うべきです。
postgresql timezone timestamp