PostgreSQL

PostgreSQL タイムゾーン

タイムゾーンを確認する
-- SQLで確認する
select current_setting('timezone') as database_timezone;
-- showコマンドで確認する
show timezone;
myposdb=# -- SQLで確認する
myposdb=# select current_setting('timezone') as database_timezone;
 database_timezone
-------------------
 Asia/Tokyo
(1 行)

myposdb=# -- showコマンドで確認する
myposdb=# show timezone;
  TimeZone
------------
 Asia/Tokyo
(1 行)

myposdb=#
-- showコマンドで確認できるって事はpostgresql.confに定義してある
-- と言う事ですね。
セッション内のタイムゾーンを変更する
SET TIME ZONE 'UTC';
-- 現在のタイムゾーン
myposdb=# select current_setting('timezone') as database_timezone;
 database_timezone
-------------------
 Asia/Tokyo
(1 行)


myposdb=# select current_timestamp;
       current_timestamp
-------------------------------
 2024-01-14 19:59:44.546419+09
(1 行)


-- セッション内のタイムゾーンをUTCへ変更
myposdb=# SET TIME ZONE 'UTC';
SET
myposdb=# select current_setting('timezone') as database_timezone;
 database_timezone
-------------------
 UTC
(1 行)


myposdb=# select current_timestamp;
       current_timestamp
-------------------------------
 2024-01-14 11:00:23.393034+00
(1 行)


-- 元のタイムゾーンへ戻す
myposdb=# SET TIME ZONE 'Asia/Tokyo';
SET
myposdb=# select current_setting('timezone') as database_timezone;
 database_timezone
-------------------
 Asia/Tokyo
(1 行)


myposdb=# select current_timestamp;
       current_timestamp
-------------------------------
 2024-01-14 20:01:14.211745+09
(1 行)


myposdb=#
タイムゾーン表記一覧を確認する
select * from pg_timezone_names t where t.name like 'Asia%'
and t.utc_offset >= '09:00:00'
order by t.utc_offset
;
-- pg_timezone_namesを参照すると確認できますがかなりの種類あります。
--
myposdb=# select count(*) from pg_timezone_names ;
 count
-------
  1189
(1 行)


-- 一部をサンプル表示します
-- is_dstは現状サマータイムかどうかを表します
--
myposdb=# select * from pg_timezone_names t where t.name like 'Asia%'
myposdb-# and t.utc_offset >= '09:00:00'
myposdb-# order by t.utc_offset
myposdb-# ;
        name        | abbrev | utc_offset | is_dst
--------------------+--------+------------+--------
 Asia/Yakutsk       | +09    | 09:00:00   | f
 Asia/Chita         | +09    | 09:00:00   | f
 Asia/Seoul         | KST    | 09:00:00   | f
 Asia/Dili          | +09    | 09:00:00   | f
 Asia/Tokyo         | JST    | 09:00:00   | f
 Asia/Jayapura      | WIT    | 09:00:00   | f
 Asia/Khandyga      | +09    | 09:00:00   | f
 Asia/Pyongyang     | KST    | 09:00:00   | f
 Asia/Vladivostok   | +10    | 10:00:00   | f
 Asia/Ust-Nera      | +10    | 10:00:00   | f
 Asia/Magadan       | +11    | 11:00:00   | f
 Asia/Srednekolymsk | +11    | 11:00:00   | f
 Asia/Sakhalin      | +11    | 11:00:00   | f
 Asia/Kamchatka     | +12    | 12:00:00   | f
 Asia/Anadyr        | +12    | 12:00:00   | f
(15 行)


myposdb=#
  • timestamp with time zonetimestamptz) : タイムゾーン情報もセットで格納している。実際の日付及び時刻はUTC(協定世界時)に変換して保持しており、表示時にはユーザの指定するタイムゾーンに変換し出力する。
  • timestamp without time zone(timestamp) :タイムゾーン情報は格納していないので全て同一のタイムゾーンで解釈する。timestamp と省略した場合は 「timestamp without time zoneとなる。
スポンサーリンク