DDLで列のデフォルト値を指定するにはどうすればよいですか?次の方法が少し前に機能することはかなり確信していました:
CREATE TABLE test
(
col_1 CHAR(12) NOT NULL,
col_2 INTEGER NOT NULL WITH DEFAULT,
col_3 CHAR(12) NOT NULL WITH DEFAULT
);
どの値を正確に指定することなく、DBが列データ型のデフォルト値を使用するように定義します(上記の例のように)。
新しいテーブル列のdefaultデフォルト値は、データ型のデフォルト値です。
また、データタイプのdefaultデフォルト値はNULL
です。これは、allの基本データタイプの場合です。 Postgres。ただし、カスタムタイプまたはドメインでは、任意の有効な値を使用できます。
_CREATE TYPE
_: のマニュアル
ユーザーがデータ型の列のデフォルトをnull値以外にしたい場合は、デフォルト値を指定できます。
DEFAULT
キーWordでデフォルトを指定します。 (このようなデフォルトは、特定の列にアタッチされた明示的なDEFAULT
句によってオーバーライドできます。)
_CREATE DOMAIN
_: のマニュアル
デフォルトの式は、列の値を指定しない挿入操作で使用されます。特定の列にデフォルト値が定義されている場合は、ドメインに関連付けられているデフォルトが上書きされます。次に、ドメインのデフォルトは、基になるデータ型に関連付けられているデフォルト値を上書きします。
_CREATE TABLE
_ の列にDEFAULT
句を使用するだけで、differentデフォルトを指定できます。そうでなければ、あなたは何もしません。 _ あなたが質問に表示するように、Postgresでは無効ですWITH DEFAULT
_
Toreset列のデフォルトをdefaultデフォルトのデータ型(通常NULL
)、drop列の指定されたデフォルト値。
_ALTER TABLE
_: のマニュアル
_ALTER [ COLUMN ] column_name DROP DEFAULT
_
_NOT NULL
_制約 は関連していますが、完全に独立しています。 _NOT NULL
_を定義し、カスタムDEFAULT
(およびタイプのnull以外のデフォルトなし)を定義した列では、すべてのINSERT
にnull以外の値を指定する必要があります。
余談ですが、おそらくPostgresでデータ型char(12)
を使用したくないでしょう。
デフォルトを指定する必要があります。私が正しく覚えている場合、デフォルトの制約はNOT NULLの前でなければなりません。
CREATE TABLE test
( col_1 CHAR(12) NOT NULL,
col_2 INTEGER DEFAULT 0 NOT NULL,
col_3 CHAR(12) DEFAULT '' NOT NULL
);