Postgresql

在預設約束中格式化時間戳

  • March 14, 2018

您可以在 Postgres v10.x 中格式化預設約束中的TIMESTAMP WITH TIME ZONE列嗎?CREATE TABLE

範常式式碼:

create_date TIMESTAMP WITH TIME ZONE
   DEFAULT to_char(current_timestamp, 'DD-MON-YYYY HH24:MI:SS')
   NOT NULL

執行此程序時,我收到以下錯誤:

錯誤:列“create_date”是帶時區的時間戳類型,但預設表達式是文本類型提示:您需要重寫或強制轉換錶達式。SQL 狀態:42804

但是,根據 Postgres Docs,這種格式應該是可能的。

我也嘗試過使用該to_timestamp()方法進行強制轉換,但是,我收到以下錯誤:

錯誤:函式 to_timestamp(帶有時區的時間戳,未知)不存在 提示:沒有函式與給定的名稱和參數類型匹配。您可能需要添加顯式類型轉換。SQL 狀態:42883

您可以在 Postgres v10.x 的 CREATE TABLE 預設約束中格式化 TIMESTAMP WITH TIME ZONE 列嗎?

不,因為那沒有任何意義。時間戳儲存為時間戳。是一種特殊的類型。你格式化顯示的東西。無論如何,任何時間點都以相同的方式儲存。格式化時間應該根本不在數據庫中完成。

像這樣想,您可能需要為某些列使用羅馬數字表示,但即使您這樣做,數據庫也會以二進製表示形式儲存整數。

現在,如果您想更改客戶端預設的時間戳輸出格式,您當然可以這樣做。 從文件

日期/時間樣式可以由使用者使用SET datestyle命令、postgresql.conf 配置文件中的 DateStyle 參數PGDATESTYLE伺服器或客戶端的環境變數來選擇。

引用自:https://dba.stackexchange.com/questions/200175