web-dev-qa-db-ja.com

デフォルトの制約でのタイムスタンプのフォーマット

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

1
chrisloyd

Postgres v10.xのCREATE TABLEデフォルト制約でTIMESTAMP WITH TIME ZONE列をフォーマットできますか?

いいえ、それは意味がありません。タイムスタンプはタイムスタンプとして保存されます。特殊タイプです。 displayの書式を設定します。どの時点でも同じように保存されます。書式設定の時間は、データベースでまったく行われないようにすべきです。

このように考えると、一部の列にはローマ数字表現が必要になる場合がありますが、データベースが整数をバイナリ表現で格納する場合でも、.

これで、タイムスタンプのクライアントのデフォルト出力フォーマットを変更したい場合は、確実に変更できます。 ドキュメントから

日付/時刻スタイルは、ユーザーがSET datestyleコマンド、 postgresql.conf構成ファイルのDateStyleパラメーター 、またはPGDATESTYLE環境変数を使用して選択できます。サーバーまたはクライアント。

1
Evan Carroll