IDENTITY と serial の暗黙の NOT NULL
GENERATED ... AS IDENTITY の列と serial 型の列を持つ 2 つの表の例です。NOT NULL を書かなくても不可になる 2 つの経路を確かめます。
入力
SQL
CREATE TABLE t1 (id int GENERATED ALWAYS AS IDENTITY, v int); CREATE TABLE t2 (id serial, w int);
表示する列
すべての列
結果
エラー 0 件・警告 0 件・情報 2 件
指摘(エラー・警告・情報)
- 情報 1 行目 t1 には PRIMARY KEY がありません。主キーのない表では、NULL を許す列だけで構成されることもあり、行の特定が難しくなります。
- 情報 2 行目 t2 には PRIMARY KEY がありません。主キーのない表では、NULL を許す列だけで構成されることもあり、行の特定が難しくなります。
| 表の数 | 2 個 |
|---|---|
| 列の数 | 4 列 |
| NULL 許可の列 | 2 列 |
| NULL 不可の列 | 2 列 |
NULL 許可の一覧
| 表 | 列 | 型 | NULL の扱い | 判定の根拠 |
|---|---|---|---|---|
| t1 | id | int | NULL 不可 | IDENTITY 列は暗黙の NOT NULL(CREATE TABLE 文書) |
| t1 | v | int | NULL 許可 | 制約なし(既定で NULL を許可) |
| t2 | id | serial | NULL 不可 | serial 型は NOT NULL 付きの整数列と同等(数値型 8.1.4) |
| t2 | w | int | NULL 許可 | 制約なし(既定で NULL を許可) |
検算(この結果になる理由)
IDENTITY 列は暗黙の NOT NULL(CREATE TABLE 文書)、serial は NOT NULL 付きの整数列と同等(8.1.4 節)です。v と w は何も付いておらず許可なので、不可 2 列・許可 2 列になります。
判定の根拠は仕様と根拠に、仕様の出典とともにまとめています。自分の入力で試すにはツールをお使いください。
このツールの制約
- 完全な SQL の構文解析はしません。CHECK 制約の中身や DEFAULT 式の意味は読まず、NULL を禁じる CHECK (x IS NOT NULL) は NULL 許可のままと表示します。
- CREATE TABLE ... AS・PARTITION OF・LIKE で取り込まれる列は判定不能です。
- ALTER TABLE で後から加えた NOT NULL や PRIMARY KEY は読みません。CREATE TABLE の文だけが対象です。
- DEFAULT の式は読み飛ばします。DEFAULT NULL でも NULL 許可の判定は変わりません。
ご利用にあたって
- 結果は字句の読み取りにもとづく確認で、実際のデータベースでの解釈を保証するものではありません。
- ドキュメントは PostgreSQL License で公開されています。このサイトはその内容を要約して参照しており、転載はしていません。