PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Ändern des Zeitzonenwerts der Daten

Es ist viel Es ist effizienter, die Zeitzone für Ihre Importsitzung festzulegen, als die Werte später zu aktualisieren.

Ich habe den Eindruck, dass Sie sich die Zeitzone wie eine Einstellung vorstellen, die für ansonsten unveränderte Werte in den Tabellen gilt. Aber so ist es überhaupt nicht. Betrachten Sie es als einen Input / Output-Modifikator. Tatsächlicher timestamp Werte (mit oder ohne Zeitzone) sind immer intern als UTC-Zeitstempel gespeichert (Anzahl Sekunden seit '2000-01-01 00:00'). ). Viele weitere Details:

Das UPDATE in deinem zweiten Beispiel verdoppelt sich die Größe der Tabelle, da jede einzelne Zeile ungültig gemacht und eine neue Version hinzugefügt wird (so wird UPDATE funktioniert mit MVCC in Postgres). Neben der teuren Operation VACUUM müssen später mehr Arbeit leisten, um die aufgeblähten Tabellen zu bereinigen. Sehr ineffizient.

Es ist absolut sicher auf SET die lokale Zeitzone für die Sitzung. Dies wirkt sich in keiner Weise auf gleichzeitige Vorgänge aus. Übrigens, SET SESSION ist dasselbe wie einfaches SET weil SESSION ist ohnehin die Vorgabe.

Wenn Sie absolut sein wollen Natürlich können Sie die Einstellung auf die aktuelle Transaktion beschränken mit SET LOCAL . Ich zitiere das Handbuch hier

Zusammengesetzt:

BEGIN;
SET LOCAL timezone = 'UTC';
COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
COMMIT;

Überprüfen Sie:

SHOW timezone;