Ich hatte vor Jahren ein sehr ähnliches Problem und stellte dann fest, dass ich es kann
ALTER DATABASE database_name SET datestyle TO "ISO, MDY";
Versuch das. (Dies funktioniert auf Datenbankbasis postgresql.conf
. Um eine Lösung für alle Ihre Datenbanken zu finden, setzen Sie diesen Parameter in sich - dank @a_horse_with_no_name.)
Bitte beachten Sie, dass die Standardeinstellung nicht vom Gebietsschema unabhängig ist . Jedoch nachinitdb
es auf das gewünschte Maß eingestellt haben, können Sie es in der Datei ändern postgresql.conf
.
@ swasheck's Kommentar ließ mich feststellen, dass mit meinen Einstellungen:
test=# SHOW lc_ctype;
lc_ctype
--------------------
Hungarian, Hungary
(1 row)
test=# SHOW lc_time;
lc_time
--------------------
Hungarian, Hungary
(1 row)
Einstellung datestyle
hat folgenden Effekt:
SET datestyle TO "ISO, MDY";
SELECT current_date;
date
------------
2012-06-21
(1 row)
Dies wird jetzt nicht wirklich erwartet - und es ist dasselbe auch auf einem anderen Server mit en_US.UTF8
. Auch das Ausprobieren "ISO, DMY"
deutet darauf hin, dass der "ISO"
Teil beim Erzeugen einer Ausgabe den anderen Teil mehr oder weniger überschreibt . Für Eingabewerte hat es den erwarteten Effekt, wie in der folgenden Tabelle zusammengefasst:
input values
'2016/01/21' '01/21/2016' '21/01/2016' output
──────────────────────────────────────────────────────────────────────
ISO, YMD OK -- -- 2016-01-21
ISO, DMY -- OK -- 2016-01-21
ISO, MDY -- -- OK 2016-01-21
- bedeutet, dass der angegebene Eingabestil zu einem Fehler für die angegebene datestyle
Einstellung führt.
Beim sorgfältigen Lesen der Dokumentation kann man feststellen, dass datestyle
es sich um zwei teilweise widersprüchliche Einstellungen handelt:
Aus historischen Gründen enthält diese Variable zwei unabhängige Komponenten: die Ausgabeformatspezifikation (ISO, Postgres, SQL oder Deutsch) und die Eingabe- / Ausgabespezifikation für die Bestellung von Jahr / Monat / Tag (DMY, MDY oder YMD).
Für mich bedeutet das, dass man durch ein wenig Experimentieren dasjenige finden muss, das seinen Bedürfnissen entspricht - aber der beste Weg ist, es auf der Standardeinstellung zu belassen und immer ein eindeutiges Eingabeformat zu verwenden. Zwei davon sind'YYYY-MM-DD'
und 'YYYYMMDD'
. Ich bevorzuge die erstere - auch mit dieser IRL;)
Hinweis: Die datestyle
Einstellung (und andere Laufzeiteinstellungen) von postgresql.conf
kann überschrieben werden ALTER DATABASE bla SET datestyle ...
, indem Sie sie dauerhaft für eine einzelne Datenbank oder SET datestyle TO ...
für die aktuelle Sitzung festlegen. Letzteres kann hilfreich sein, wenn Sie Daten von Drittanbietern mit einem anderen Datumsformat importieren.