2017-04-19 39 views
0

首先,我已經閱讀了很多關於使用時區或不使用時區的Postgres中的日期類型。看來用時區管理日期(時間戳)在99%的情況下是最好的。沒有時區的同步引擎或不在PostgreSQL中?

目前我已經建立了一個同步引擎,默認使用設置爲UTC時間的Rails應用程序(非常重要)和MariaDB管理日期(所以UTC日期寫入數據庫但沒有看到任何東西,除了日期:2017-04 -19 17:45:09)。同步到服務器引擎的設備也使用本地SQLite數據庫,日期爲UTC。因此,對於同一個文檔,我可以在SQLite字段和MariaDB字段中看到created_at字段的相同日期。它運作良好。

請注意,用戶不必在服務器應用程序和設備應用程序中設置自定義時區。我想要所有的UTC。

由於我計劃遷移到PostgreSQL有很多原因,我很確定我需要使用沒有時區的Timestamp,但是在讀完所有數據後我仍然有些疑惑。

對此用例有何建議?

EDIT

測試1

因此,我使用3次測試pgloader製成MariaDB的=>的PostgreSQL使用計算機默認時區

enter image description here

日期是相同的,但正如你所看到的,有時有+01,有時+02?

的Test2:MariaDB的=>使用的時區Postgres的

enter image description here

設置時區爲UTC後的PostgreSQL在這裏有+00,合乎邏輯的UTC,但我的日期發生變化。

Test3的:MariaDB的=>使用時間戳WITHOUT時區

enter image description here

所有相同那裏的PostgreSQL。

回答

1

「With Timezone」只是告訴postgres在存儲時間戳之前將本地時間轉換爲UTC,並在查詢時轉換回本地時間。基礎數據以UTC格式存儲,並且實時數據中不存儲時區信息,它只是數據庫用來確定如何轉換數據以供人使用的標誌。

如果您的客戶端連接在數據庫連接時將PG時區設置爲UTC,則幾乎沒有區別。傳統觀點認爲總是在時區中使用時間戳,因爲它會使其他系統(postgresql客戶端)中的查詢在未來更加靈活和易於使用。

+0

感謝喬的回答。 我使用工具pgloader進行了3次測試,而不是使用時區遷移數據。請看我的編輯。我懷疑。 –

+0

@ alex.bour +01或+02是用於日光節約時間開始或結束之後的日期。在某一天之後的時間將從+1改變爲+2 正如你所看到的不是+或 - 任何意味着所顯示的數據完全是存儲的數據,所以當使用「沒有時區」時,它的返回正好是放入。在插入數據之前完成任何轉換。在「With timezone」中,轉換在插入時完成。也就是說,如果您在中心時間,並且存儲了時間戳,它將根據一年中的某一天以-6或-5結尾。 –

+0

謝謝你詳細回覆Joe。開始使用PGSQL非常令人興奮。 –

相關問題