型を広げて同時に 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 の例
型の変更namevarchar(30)varchar(80)ALTER TABLE shops ALTER COLUMN name TYPE varchar(80);
NOT NULL を付けるname許可NOT NULLALTER TABLE shops ALTER COLUMN name SET NOT NULL;

検算(この結果になる理由)

name 列は型が varchar(30) から varchar(80) に変わり、NOT NULL も付くので、型の変更 1 件と NOT NULL の変更 1 件の計 2 行です。型の書き換えと NULL の行での失敗の警告が 1 件ずつ、計 2 件出ます。

判定の根拠は仕様と根拠に、仕様の出典とともにまとめています。自分の入力で試すにはツールをお使いください。

このツールの制約

ご利用にあたって

  • 生成する ALTER TABLE は参考の例です。本番で実行する前に、バックアップと検証環境での確認を必ず行ってください。
  • ドキュメントは PostgreSQL License で公開されています。このサイトはその内容を要約して参照しており、転載はしていません。

ほかの入力例