型を広げて同時に NOT NULL を付ける
name 列を varchar(30) から varchar(80) に広げ、同時に NOT NULL も付けた例です。型の変更と NOT NULL の変更が別々の ALTER TABLE になり、それぞれ警告が出ることを確かめます。
入力
変更前の CREATE TABLE
CREATE TABLE shops (id integer, name varchar(30));
変更後の CREATE TABLE
CREATE TABLE shops (id integer, name varchar(80) NOT NULL);
結果の見せ方
差分の表
結果
エラー 0 件・警告 2 件・情報 0 件
指摘(エラー・警告・情報)
- 警告 変更後 1 行目 列 name の型を varchar(30) から varchar(80) に変えると、通常は表と索引が書き換えられ、変換できない値があると失敗します。暗黙の変換がない型どうしでは USING 式が必要で、DEFAULT には USING が効かないため付け直しが要ることもあります(ALTER TABLE の ALTER COLUMN TYPE)。
- 警告 変更後 1 行目 列 name に NOT NULL を付けます。NULL の入っている行があると失敗するため、先に NULL を埋めてください(ALTER TABLE の SET NOT NULL)。
| 追加した列 | 0 個 |
|---|---|
| 削除した列 | 0 個 |
| 型の変更 | 1 個 |
| NOT NULL の変更 | 1 個 |
列の差分
| 差分 | 列 | 変更前 | 変更後 | ALTER TABLE の例 |
|---|---|---|---|---|
| 型の変更 | name | varchar(30) | varchar(80) | ALTER TABLE shops ALTER COLUMN name TYPE varchar(80); |
| NOT NULL を付ける | name | 許可 | NOT NULL | ALTER TABLE shops ALTER COLUMN name SET NOT NULL; |
検算(この結果になる理由)
name 列は型が varchar(30) から varchar(80) に変わり、NOT NULL も付くので、型の変更 1 件と NOT NULL の変更 1 件の計 2 行です。型の書き換えと NULL の行での失敗の警告が 1 件ずつ、計 2 件出ます。
判定の根拠は仕様と根拠に、仕様の出典とともにまとめています。自分の入力で試すにはツールをお使いください。
このツールの制約
- 型は表記が同じかどうかで比べます。integer と int、varchar と character varying のような別名は同じ型と見なさず、型の変更として表示します。
- 列の名前の変更は見分けられず、削除と追加として表示します(データを残すなら RENAME COLUMN を使います)。
- 主キー・UNIQUE・CHECK・外部キー・索引・DEFAULT の変更は差分に含めません。表の制約が違うときは情報で知らせます。
- 生成する SQL は参考の例です。USING 式・データの移行・ロックの影響は自動では考えません。
ご利用にあたって
- 生成する ALTER TABLE は参考の例です。本番で実行する前に、バックアップと検証環境での確認を必ず行ってください。
- ドキュメントは PostgreSQL License で公開されています。このサイトはその内容を要約して参照しており、転載はしていません。