web-dev-qa-db-ja.com

データ型のデフォルト値を列のデフォルトとして使用するにはどうすればよいですか?

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が列データ型のデフォルト値を使用するように定義します(上記の例のように)。

4
user3193317

新しいテーブル列のdefaultデフォルト値は、データ型のデフォルト値です。

また、データタイプのdefaultデフォルト値はNULLです。これは、allの基本データタイプの場合です。 Postgres。ただし、カスタムタイプまたはドメインでは、任意の有効な値を使用できます。

_CREATE TYPE_: のマニュアル

ユーザーがデータ型の列のデフォルトをnull値以外にしたい場合は、デフォルト値を指定できます。 DEFAULTキーWordでデフォルトを指定します。 (このようなデフォルトは、特定の列にアタッチされた明示的なDEFAULT句によってオーバーライドできます。)

_CREATE DOMAIN_: のマニュアル

デフォルトの式は、列の値を指定しない挿入操作で使用されます。特定の列にデフォルト値が定義されている場合は、ドメインに関連付けられているデフォルトが上書きされます。次に、ドメインのデフォルトは、基になるデータ型に関連付けられているデフォルト値を上書きします。

_CREATE TABLE_ の列にDEFAULT句を使用するだけで、differentデフォルトを指定できます。そうでなければ、あなたは何もしません。 _WITH DEFAULT_ あなたが質問に表示するように、Postgresでは無効です

Toreset列のデフォルトをdefaultデフォルトのデータ型(通常NULL)、drop列の指定されたデフォルト値。

_ALTER TABLE_: のマニュアル

_ALTER [ COLUMN ] column_name DROP DEFAULT
_

_NOT NULL_制約 は関連していますが、完全に独立しています。 _NOT NULL_を定義し、カスタムDEFAULT(およびタイプのnull以外のデフォルトなし)を定義した列では、すべてのINSERTにnull以外の値を指定する必要があります。


余談ですが、おそらくPostgresでデータ型char(12)を使用したくないでしょう。

7

デフォルトを指定する必要があります。私が正しく覚えている場合、デフォルトの制約は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
);
3
Lennart