Bei der Arbeit mit PostgreSQL kann es gelegentlich vorkommen, dass Sie eine Liste mit Zeitzonen benötigen, die Postgres erkennt.
Beispielsweise könnten Sie versuchen, die Zeitzone für Ihre aktuelle Sitzung festzulegen, oder Sie könnten eine der datetime-Funktionen verwenden, mit denen Sie die Zeitzone ändern können.
Unten sind zwei Ansichten und zwei Funktionen, die eine Liste von Zeitzonen zurückgeben.
Die pg_timezone_abbrevs-Ansicht
Die pg_timezone_abbrevs
view stellt eine Liste der Zeitzonenabkürzungen bereit, die derzeit von den datetime-Funktionen erkannt werden.
So sehen die oberen 10 Zeilen aus:
SELECT *
FROM pg_timezone_abbrevs
LIMIT 10;
Ergebnis:
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
Der is_dst
Spalte gibt an, ob es sich um eine Sommerzeit-Abkürzung handelt.
Beachten Sie, dass sich der Inhalt dieser Ansicht ändert, wenn die timezone_abbreviations
Laufzeitparameter geändert.
Beachten Sie auch, dass die Postgres-Dokumentation besagt:
Während die meisten Zeitzonenabkürzungen feste Abweichungen von UTC darstellen, gibt es einige, deren Wert historisch variiert hat (weitere Informationen finden Sie in Abschnitt B.4). In solchen Fällen stellt diese Ansicht ihre aktuelle Bedeutung dar.
Die Funktion pg_timezone_abbrevs()
Alternativ können Sie pg_timezone_abbrevs()
verwenden Funktion, um die Ergebnisse als SETOF zurückzugeben.
SELECT pg_timezone_abbrevs()
LIMIT 10;
Ergebnis:
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)
Sie können auch die folgende Syntax verwenden, um die Ergebnisse bei Bedarf in separaten Spalten zurückzugeben.
SELECT *
FROM pg_timezone_abbrevs()
LIMIT 10;
Ergebnis:
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
Die pg_timezone_names-Ansicht
Die pg_timezone_names
view bietet eine Liste von Zeitzonennamen, die von SET TIMEZONE
erkannt werden , zusammen mit den zugehörigen Abkürzungen, UTC-Offsets und Sommerzeitstatus.
So sehen die oberen 10 Zeilen aus:
SELECT *
FROM pg_timezone_names
LIMIT 10;
Ergebnis:
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
Der is_dst
Spalte gibt an, ob in der Zeitzone derzeit Sommerzeit gilt oder nicht.
Für diese Ansicht heißt es in der Postgres-Dokumentation:
Im Gegensatz zu den in
pg_timezone_abbrevs
gezeigten Abkürzungen , implizieren viele dieser Namen eine Reihe von Regeln für das Übergangsdatum zur Sommerzeit. Daher ändern sich die zugeordneten Informationen über lokale DST-Grenzen hinweg. Die angezeigten Informationen werden basierend auf dem aktuellen Wert vonCURRENT_TIMESTAMP
berechnet .
Die Funktion pg_timezone_names()
Sie können auch pg_timezone_names()
verwenden Funktion, um die Ergebnisse als SETOF zurückzugeben.
SELECT pg_timezone_names()
LIMIT 10;
Ergebnis:
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)
Sie können auch die folgende Syntax verwenden, um die Ergebnisse in separaten Spalten zurückzugeben.
SELECT * FROM pg_timezone_names()
LIMIT 10;
Ergebnis:
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