Postgresql
在預設約束中格式化時間戳
您可以在 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
伺服器或客戶端的環境變數來選擇。