So stellen Sie die Postgresql-Datenbank so ein, dass das Datum dauerhaft als "MDY" angezeigt wird

22

Wie kann ich meine Datenbank so einstellen, dass das 'Datum' als "MDY" angezeigt wird, ohne Folgendes auszuführen:

SET datestyle = "ISO, MDY";

Jedes Mal, wenn ich versuche, darauf zuzugreifen? Ich benutze Postgresql Version 9.1, Ubuntu 12.04. Mein Systemgebietsschema wurde zum Zeitpunkt der Datenbankinstallation auf festgelegt, en_CA.utf8und ich habe es kürzlich auf geändert en_US.utf8.

show lc_CTYPE

gibt zurück: -> "en_CA.UTF-8"

aber

show LC_CoLLATE

gibt zurück: -> "en_CA.UTF-8"

Timka
quelle

Antworten:

32

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 datestylehat 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 datestyleEinstellung führt.

Beim sorgfältigen Lesen der Dokumentation kann man feststellen, dass datestylees 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 datestyleEinstellung (und andere Laufzeiteinstellungen) von postgresql.confkann ü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.

dezso
quelle
3

Danke @a_horse_with_no_name | @dezso | @ ypercubeᵀᴹ

Ich möchte eine Antwort schreiben, die einfach zu implementieren ist: Schritte

Möglichkeit 1 : Festlegen des Datenstils Nur pro Datenbank

  1. show datestyle;Zeigt den aktuellen Datumsstil "ISO, DMY " oder "ISO, MDY" an

  2. Nun, je nachdem, was Sie in Postgres DMY oder MDY einstellen möchten, fragen Sie unten ab

    ALTER DATABASE "my_database_name" SET datestyle TO "ISO, DMY";

    oder

    ALTER DATABASE "my_database_name" SET datestyle TO "ISO, MDY";

  3. Wichtigster Schritt: Immer nach dem Setzen des Datumsstils wird postgres neu gestartet

    sudo service postgresql restart

    Oder

    sudo /etc/init.d/postgresql restart

  4. Lässt die Konfiguration testen

    Wenn Sie unten DMY eingestellt haben, sollte die Abfrage für Sie funktionieren

    Abfrage: select '20/12/2016'::date Ausgabe: "2016-12-20"

    Oder

    Wenn Sie unten MDY eingestellt haben, sollte die Abfrage für Sie funktionieren

    Abfrage: select '12/19/2016'::date Ausgabe: "2016-12-19"

Methode 2 : Permanent: Was immer Sie in der Konfigurationsdatei festlegen, wird in allen Datenbanken festgelegt, die Sie in Zukunft erstellen werden

  1. In /etc/postgresql/9.3/main/postgresql.conf setzen

    datestyle = 'iso, dmy' ODER datestyle = 'iso, mdy'

  2. Wichtigster Schritt: Immer nach dem Setzen des Datumsstils wird postgres neu gestartet

    sudo service postgresql restart

    Oder

    sudo /etc/init.d/postgresql restart

  3. Lässt die Konfiguration testen

    wenn Sie DMY eingestellt habenunten Abfrage für Sie funktionieren

    Abfrage: select '20/12/2016'::date Ausgabe: "2016-12-20"

    Oder

    wenn Sie MDY eingestellt habenunten Abfrage für Sie funktionieren

    Abfrage: select '12/19/2016'::date Ausgabe: "2016-12-19"

vijay
quelle