2017-11-02 10 views
0

Ich bin ganz neu in PostgreSQL kommt von einigen Jahren in einem Unternehmen ändern, die MySQL ausschließlich mit und ich bin eine wenig Wache vom Typ TIMESTAMP gefangen:Wie Standard-Zeitformat in PostgreSQL

CREATE TABLE example (
    example_id SERIAL PRIMARY KEY, 
    time_utc TIMESTAMP 
); 
INSERT INTO example (time_utc) VALUES (NOW()); 

SELECT * FROM example; 

example_id |   time_utc   
------------+---------------------------- 
      1 | 2017-11-02 21:37:26.592814 

I bin mir bewusst, dass ich einfach das Feld zu seiner ungenauen Form gegossen kann:

SELECT example_id, time_utc::timestamp(0) 

und bin mir auch bewusst, dass ich die Präzision in der Tabellendefinition deklarieren:

time_utc TIMESTAMP(0) 

Aber gibt es eine Möglichkeit, dies zu ändern, um die Standardgenauigkeit für alle TIMESTAMP Felder zu sein? Und gibt es auch eine Möglichkeit, das Verhalten von NOW() so zu ändern, dass es diesem Format entspricht (einschließlich der fehlenden Zeitzone)?

Zum Beispiel in MySQL:

SELECT NOW(); 
+---------------------+ 
| NOW()    | 
+---------------------+ 
| 2017-11-02 21:41:26 | 
+---------------------+ 

PostgreSQL:

SELECT NOW(); 
       now    
------------------------------- 
2017-11-02 21:42:48.855801+00 

Ehrlich gesagt kann ich mich einfach nicht jederzeit in der Vergangenheit habe ich für mehr Präzision gewünscht habe aus MySQL-Zeitstempel und die eine weniger präzise Form ist den Augen objektiv leichter. Ist dies eine einfache Konfigurationsänderung oder ist das etwas, was ich in meinem Übergang zu PostgreSQL aufheben und bewältigen muss?

Dank

+0

Die Anzeige vollständig von dem SQL-Client vom Server nicht kontrolliert wird. Ich denke, der 'psql'-Client berücksichtigt die [lc_time] (https://www.postgresql.org/docs/current/static/runtime-config-client.html#guc-lctime) Konfiguration –

+0

@a_horse_with_no_name also bei der Angabe in der Tabelle def mit 'timestamp (0)' (eine serverseitige Sache), schneidet das nur die Genauigkeit ab (dh der Zeitstempel wird als 'HH: ii: ss.000000' gespeichert) beim Einfügen? – thedarklord47

+0

@a_horse_with_no_name mit anderen Worten, alle Zeitstempel-Operationen * immer * wirken auf die ganze Zeit (einschließlich Millis)? – thedarklord47

Antwort

1

Das Datum/Zeit-Stil kann den SET datestyle Befehl durch den Benutzer ausgewählt werden, die Parameter datestyle in der Datei postgresql.conf Konfiguration oder die PGDATESTYLE environment variable auf dem Server oder Client.

https://www.postgresql.org/docs/current/static/datatype-datetime.html#datatype-datetime-output

Die verfügbaren Optionen (Masken) sind ebenfalls auf dem gleichen Bezug aufgeführt. Aber sie liefern vielleicht nicht genau das, was Sie wollen. Darüber hinaus haben Sie die to_char() Funktion

Die Formatierungsfunktion to_char (siehe Abschnitt 9.8) ist auch als ein flexibleres Datum/Uhrzeit Ausgabe zu formatieren.

https://www.postgresql.org/docs/current/static/functions-formatting.html

+0

Ist Ihre Frage jetzt gelöst? Hast du noch Fragen zu dieser Antwort? Um eine Antwort zu akzeptieren "[** Klicken Sie auf das Häkchen **] (https://ibb.co/ikqyO6)" Weitere Informationen finden Sie unter [help/accepting] (https://stackoverflow.com/help/someone-answers) –