如果我繼承了一個Postgresql填充TIMESTAMP型別的資料庫,并且覺得需要將它們全部轉換為TIMESTAMPTZ型別,這是一個簡單的程序,只需要:
ALTER TABLE mytable ALTER COLUMN the_time_stamp TYPE TIMESTAMPTZ;
我有這樣一個資料庫,其中的所有時間戳都是在與我的(和服務器的)不同的時區創建的,因此它們似乎在內部存盤為 TIMESTAMPTZ。也就是說,我有兩個客戶端(一個寫入,一個讀取,兩者都不在 UTC 區域中),并且當我讀取時,在 zone2 中讀取時寫入 zone1 的時間戳是正確的,這意味著(對我而言)它們已被轉換并且在寫入和讀取之間以UTC格式存盤。這讓我想知道:
- 根據所連接客戶端的時區,所有時間戳是否都以相同格式存盤在資料庫中,唯一的區別在于處理輸入/輸出的方式?
如果它是真的,這似乎是一件如此清晰和簡單的事情,但我找不到它清楚和/或簡單地陳述......
uj5u.com熱心網友回復:
在內部,都timestamp和timestamp with time zone被存盤在相同的方式:一個8位元組的整數,它是從2000-01-01 00:00:00以微秒為單位的偏移量。
區別在于語意:whiletimestamp with time zone存盤為 UTC 中從 2000-01-01 午夜的偏移量,沒有對 進行時區轉換timestamp。
這意味著如果您更改資料型別,則必須重寫該表,因為參考點已更改。如果timezone引數設定為UTC,則值不會更改,但 PostgreSQL 中沒有優化可以避免這種情況下的表重寫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/349165.html
標籤:PostgreSQL
