PostgreSQLを使用しているときに、Postgresが認識するタイムゾーンのリストが必要な状況に陥ることがあります。
たとえば、現在のセッションのタイムゾーンを設定しようとしている場合や、タイムゾーンを操作できる日時関数の1つを使用している場合があります。
以下は、タイムゾーンのリストを返す2つのビューと2つの関数です。
pg_timezone_abbrevsビュー
pg_timezone_abbrevs
ビューは、日時関数によって現在認識されているタイムゾーンの省略形のリストを提供します。
上位10行は次のようになります。
SELECT *
FROM pg_timezone_abbrevs
LIMIT 10;
結果:
abbrev | utc_offset | is_dst --------+------------+-------- ACDT | 10:30:00 | t ACSST | 10:30:00 | t ACST | 09:30:00 | f ACT | -05:00:00 | f ACWST | 08:45:00 | f ADT | -03:00:00 | t AEDT | 11:00:00 | t AESST | 11:00:00 | t AEST | 10:00:00 | f AFT | 04:30:00 | f
is_dst
列は、これが夏時間の略語であるかどうかを示します。
timezone_abbreviations
を実行すると、このビューの内容が変わることに注意してください。 実行時パラメータが変更されます。
また、Postgresのドキュメントには次のように記載されていることに注意してください。
ほとんどのタイムゾーンの略語はUTCからの固定オフセットを表しますが、歴史的に値が変化しているものもあります(詳細についてはセクションB.4を参照してください)。このような場合、このビューは現在の意味を示します。
pg_timezone_abbrevs()関数
または、pg_timezone_abbrevs()
を使用することもできます 結果をSETOFとして返す関数。
SELECT pg_timezone_abbrevs()
LIMIT 10;
結果:
pg_timezone_abbrevs ------------------- (ACDT,10:30:00,t) (ACSST,10:30:00,t) (ACST,09:30:00,f) (ACT,-05:00:00,f) (ACWST,08:45:00,f) (ADT,-03:00:00,t) (AEDT,11:00:00,t) (AESST,11:00:00,t) (AEST,10:00:00,f) (AFT,04:30:00,f)
必要に応じて、次の構文を使用して結果を別の列に返すこともできます。
SELECT *
FROM pg_timezone_abbrevs()
LIMIT 10;
結果:
abbrev | utc_offset | is_dst --------+------------+-------- ACDT | 10:30:00 | t ACSST | 10:30:00 | t ACST | 09:30:00 | f ACT | -05:00:00 | f ACWST | 08:45:00 | f ADT | -03:00:00 | t AEDT | 11:00:00 | t AESST | 11:00:00 | t AEST | 10:00:00 | f AFT | 04:30:00 | f
pg_timezone_namesビュー
pg_timezone_names
ビューは、SET TIMEZONE
によって認識されるタイムゾーン名のリストを提供します 、関連する略語、UTCオフセット、および夏時間のステータスとともに。
上位10行は次のようになります。
SELECT *
FROM pg_timezone_names
LIMIT 10;
結果:
name | abbrev | utc_offset | is_dst ------------------+--------+------------+-------- Indian/Mauritius | +04 | 04:00:00 | f Indian/Chagos | +06 | 06:00:00 | f Indian/Mayotte | EAT | 03:00:00 | f Indian/Christmas | +07 | 07:00:00 | f Indian/Cocos | +0630 | 06:30:00 | f Indian/Maldives | +05 | 05:00:00 | f Indian/Comoro | EAT | 03:00:00 | f Indian/Reunion | +04 | 04:00:00 | f Indian/Mahe | +04 | 04:00:00 | f Indian/Kerguelen | +05 | 05:00:00 | f
is_dst
列は、タイムゾーンが現在夏時間を採用しているかどうかを示します。
このビューについて、Postgresのドキュメントには次のように記載されています。
pg_timezone_abbrevs
に示されている略語とは異なります 、これらの名前の多くは、夏時間の移行日ルールのセットを意味します。したがって、関連する情報はローカルDSTの境界を越えて変化します。表示される情報は、CURRENT_TIMESTAMP
の現在の値に基づいて計算されます 。
pg_timezone_names()関数
pg_timezone_names()
を使用することもできます 結果をSETOFとして返す関数。
SELECT pg_timezone_names()
LIMIT 10;
結果:
pg_timezone_names --------------------------------- (Indian/Mauritius,+04,04:00:00,f) (Indian/Chagos,+06,06:00:00,f) (Indian/Mayotte,EAT,03:00:00,f) (Indian/Christmas,+07,07:00:00,f) (Indian/Cocos,+0630,06:30:00,f) (Indian/Maldives,+05,05:00:00,f) (Indian/Comoro,EAT,03:00:00,f) (Indian/Reunion,+04,04:00:00,f) (Indian/Mahe,+04,04:00:00,f) (Indian/Kerguelen,+05,05:00:00,f)
次の構文を使用して、結果を別々の列に返すこともできます。
SELECT * FROM pg_timezone_names()
LIMIT 10;
結果:
name | abbrev | utc_offset | is_dst ------------------+--------+------------+-------- Indian/Mauritius | +04 | 04:00:00 | f Indian/Chagos | +06 | 06:00:00 | f Indian/Mayotte | EAT | 03:00:00 | f Indian/Christmas | +07 | 07:00:00 | f Indian/Cocos | +0630 | 06:30:00 | f Indian/Maldives | +05 | 05:00:00 | f Indian/Comoro | EAT | 03:00:00 | f Indian/Reunion | +04 | 04:00:00 | f Indian/Mahe | +04 | 04:00:00 | f Indian/Kerguelen | +05 | 05:00:00 | f