PostgreSQL テーブルの変更:列の追加と名前変更

⚡ スマートサマリー

PostgreSQL ALTER TABLE を使用すると、既存のテーブルの構造を変更でき、オブジェクトを再作成することなく、列の追加や削除、列またはテーブル全体の名前変更、デフォルト値の設定、チェック制約の適用などを行うことができます。

  • 🧱 構文: ALTER TABLE table-name action は、ステートメントごとに 1 つの構造変更を実行します。
  • 列を追加する: ADD column-name data-type は、テーブルに新しい列を追加します。
  • 会<XNUMXxEXNUMX><XNUMXxXNUMXF>️️<XNUMXxXNUMXF>️️ 名前の変更: RENAME COLUMN と RENAME TO は、列名またはテーブル名を変更します。
  • ⚙️ デフォルト値: ALTER COLUMN SET DEFAULT は、今後の INSERT 行に値を指定します。
  • 🛡️ 制約条件の確認: ADD CHECK は新しいデータを検証し、ルールに違反する値を拒否します。
  • 🤖 AI移行: AIアシスタントはALTER TABLEスクリプトを作成し、安全に展開できるかどうかを確認する。

PostgreSQL 他の机

ALTER TABLE とは何ですか PostgreSQL?

その 他の机 コマンドは、 PostgreSQL テーブル。これは、削除せずにテーブルの列またはテーブル自体の名前を変更するために使用されるコマンドです。ping そして、そのオブジェクトを再現する。

構文

の構文は次のとおりです。 PostgreSQL ALTER TABLE コマンド:

ALTER TABLE table-name action;

table-name パラメータは、変更するテーブルの名前です。action パラメータは、列名の変更や列のデータ型の変更など、実行する必要のあるアクションです。

詳細説明

ALTER TABLE コマンドは、既存のテーブルの定義を変更します。次のサブフォームを使用します。

  • 列の追加これは、CREATE TABLE コマンドと同様の構文を使用して、テーブルに新しい列を追加します。
  • ドロップ カラム: ドロップ用ping テーブルの列。列に課せられていた制約とインデックスも削除されます。
  • デフォルトの設定/削除: 列のデフォルト値を設定または削除するために使用されます。変更は後続の場合にのみ適用されます。 INSERT ステートメント.
  • NOT NULL のセット/ドロップ: 列にNULL値を許可するかどうかを変更します。
  • セット統計ANALYZE操作における各列の統計情報収集対象を設定するためのものです。
  • ストレージの設定: 列の保存モード(インラインか補助テーブルか)を設定します。
  • OIDなしでセット: テーブルの古い OID 列を削除するために使用されます。
  • RENAME: テーブル名またはカラム名を変更します。
  • テーブル制約の追加テーブルに新しい制約を追加するために使用されます。構文は、 テーブルを作成
  • ドロップコンストレイント: ドロップに使用ping テーブル制約。
  • OWNERテーブル、シーケンス、インデックス、またはビューの所有者を特定のユーザーに変更する場合。
  • CLUSTER: 将来のクラスタ操作で使用するテーブルをマークするため。

列の変更

列は様々な方法で変更できます。これらの変更はALTER TABLEコマンドを使用して行います。以下でそれらについて説明します。

新しい列の追加

新しい列を追加するには PostgreSQL テーブルの場合、ALTER TABLE コマンドは次の構文で使用されます。

ALTER TABLE table-name
  ADD new-column-name column-definition;

テーブル名は、変更するテーブルの名前です。新しい列名は、追加する新しい列の名前です。列定義は、 データ・タイプ 新しい列について。下記の書籍表を参照してください。

PostgreSQL ALTER TABLEの例

テーブルには id と name の 2 つの列があります。テーブルに新しい列を追加し、author という名前を付ける必要があります。以下のコマンドを実行してください。

ALTER TABLE Book
  ADD author VARCHAR(50);

上記のコマンドを実行すると、Book テーブルは次のようになります。

PostgreSQL ALTER TABLEの例

新しい列が正常に追加されました。

テーブルの列の名前を変更する

ALTER TABLE コマンドを使用して列の名前を変更できます。この場合、コマンドは次の構文で使用されます。

ALTER TABLE table-name
  RENAME COLUMN old-name TO new-name;

テーブル名は、列名を変更するテーブルの名前です。旧名は列の現在の名前、新名は列の新しい名前です。以下に示すテーブル Book を例に考えてみましょう。

本:

PostgreSQL ALTER TABLEの例

列名「author」を「book_author」に変更する必要があります。コマンドは以下のとおりです。

ALTER TABLE Book
  RENAME COLUMN author TO book_author;

コマンドを実行すると、テーブルの構造を表示できます。

PostgreSQL ALTER TABLEの例

カラム名は正常に変更されました。

列のデフォルト値の設定

列にデフォルト値を設定することで、INSERT操作時にその列の値を指定しなくても、デフォルト値が使用されるようにすることができます。この場合、ALTER TABLEコマンドを次の構文で使用できます。

ALTER TABLE table-name ALTER COLUMN column-name [SET DEFAULT value];

テーブル名は、列を変更するテーブルの名前です。列名は、デフォルト値を設定する列の名前であり、値はその列のデフォルト値です。以下の Book テーブルを例に考えてみましょう。

PostgreSQL ALTER TABLEの例

book_author 列のデフォルト値を設定する必要があります。次のコマンドを実行します。

ALTER TABLE Book ALTER COLUMN book_author SET DEFAULT 'Nicholas Samuel';

次に、テーブルに行を挿入しましょう。

INSERT INTO Book (id, name)
 VALUES (6, 'PostgreSQL for Beginners');

なお、idとnameの2つの列にのみ値を挿入しました。ただし、book_author列にはデフォルト値が使用されています。

PostgreSQL ALTER TABLEの例

チェック制約の追加

チェック制約は、テーブルに挿入されるレコードを検証するのに役立ちます。 これを行うには、ALTER TABLE コマンドと ADD CHECK ステートメントを組み合わせます。 構文:

ALTER TABLE table-name ADD CHECK expression;

table-nameは変更するテーブルの名前であり、expressionはテーブル列に課す制約です。Bookテーブルのbook_author列を、NicholasとSamuelの値のみを受け入れるように変更してみましょう。

ALTER TABLE Book ADD CHECK (book_author IN ('Nicholas', 'Samuel'));

ここで、Nicholas または Samuel 以外の値を Book テーブルの book_author 列に挿入してみます。

INSERT INTO Book
VALUES(7, 'Best PostgreSQL Book', 'Gregory Bush');

このステートメントは次のエラーを返します。

PostgreSQL ALTER TABLEの例

チェック制約に違反したため、挿入操作は失敗しました。

テーブルの名前を変更する

テーブルの名前を変更するための ALTER TABLE コマンドの構文は次のとおりです。

ALTER TABLE table-name
  RENAME TO new-table-name;

table-name は現在使用されているテーブル名で、new-table-name はテーブルに割り当てる新しい名前です。たとえば、Book テーブルの名前を Books に変更してみましょう。

ALTER TABLE Book
  RENAME TO Books;

pgAdminの使用

これまでの操作はSQLシェルから実行してきました。次に、同じ操作をpgAdminを使って視覚的に実行する方法を見ていきましょう。

新しい列の追加

ステップ1) pgAdmin アカウントにログインします。

ステップ2)

  1. 左側のナビゲーション バーで、[データベース] をクリックします。
  2. 「デモ」をクリックします。

PostgreSQL ALTER TABLEの例

ステップ3) クエリ エディターにクエリを入力します。

ALTER TABLE Book
  ADD author VARCHAR(50);

ステップ4) 「実行」ボタンをクリックします。

PostgreSQL ALTER TABLEの例

ステップ5) 列が追加されたかどうかを確認するには、次の手順を実行します。

  1. 左側のナビゲーションから「データベース」をクリックします。
  2. デモを展開します。
  3. スキーマを展開します。
  4. 「パブリック」を展開します。
  5. 「テーブル」を展開します。
  6. 本を展開します。
  7. 列を展開します。

PostgreSQL ALTER TABLEの例

以下に示すように、列が追加されているはずです。

PostgreSQL ALTER TABLEの例

テーブルの列の名前を変更する

ステップ1) pgAdmin アカウントにログインします。

ステップ2)

  1. 左側のナビゲーション バーで、[データベース] をクリックします。
  2. 「デモ」をクリックします。

PostgreSQL ALTER TABLEの例

ステップ3) クエリ エディターにクエリを入力します。

ALTER TABLE Book
  RENAME COLUMN author TO book_author;

ステップ4) 「実行」ボタンをクリックします。

PostgreSQL ALTER TABLEの例

ステップ5) 変更が成功したかどうかを確認するには、以前と同様に書籍テーブルの列を展開してください。

PostgreSQL ALTER TABLEの例

列は次のようになります。

PostgreSQL ALTER TABLEの例

列は正常に変更されました。

列のデフォルト値の設定

ステップ1) pgAdmin アカウントにログインします。

ステップ2)

  1. 左側のナビゲーション バーで、[データベース] をクリックします。
  2. 「デモ」をクリックします。

PostgreSQL ALTER TABLEの例

ステップ3) クエリ エディターにクエリを入力します。

ALTER TABLE Book ALTER COLUMN book_author SET DEFAULT 'Nicholas Samuel';

ステップ4) 「実行」ボタンをクリックします。

PostgreSQL ALTER TABLEの例

ステップ5) テストするには、クエリ エディターで次のコマンドを実行してください。

INSERT INTO Book (id, name)
 VALUES (6, 'PostgreSQL for Beginners')

ステップ6) これで、テーブルにクエリを実行して、デフォルト値が book_author 列に挿入されたかどうかを確認できます。

PostgreSQL ALTER TABLEの例

チェック制約の追加

ステップ1) pgAdmin アカウントにログインします。

ステップ2)

  1. 左側のナビゲーション バーで、[データベース] をクリックします。
  2. 「デモ」をクリックします。

PostgreSQL ALTER TABLEの例

ステップ3) クエリ エディターにクエリを入力します。

ALTER TABLE Book ADD CHECK (book_author IN ('Nicholas', 'Samuel'))

ステップ4) 「実行」ボタンをクリックします。

PostgreSQL ALTER TABLEの例

ステップ5) これをテストするには、クエリ エディタに次のクエリを入力し、[実行] ボタンをクリックしてください。

INSERT INTO Book
VALUES(7, 'Best PostgreSQL Book', 'Gregory Bush');

PostgreSQL ALTER TABLEの例

次のような結果が返されます。

PostgreSQL ALTER TABLEの例

テーブルの名前を変更する

ステップ1) pgAdmin アカウントにログインします。

ステップ2)

  1. 左側のナビゲーション バーで、[データベース] をクリックします。
  2. 「デモ」をクリックします。

PostgreSQL ALTER TABLEの例

ステップ3) クエリ エディターにクエリを入力します。

ALTER TABLE Book
  RENAME TO Books;

ステップ4) 「実行」ボタンをクリックします。

PostgreSQL ALTER TABLEの例

ステップ5) テーブルの名前が変更されたかどうかを確認するには、[データベース] > [デモ] > [スキーマ] > [パブリック] > [テーブル] を展開します。

PostgreSQL ALTER TABLEの例

テーブルの名前が正常に変更されました。

このチュートリアルで使用するデータベースをダウンロードする

よくあるご質問

ALTER TABLE table_name ALTER COLUMN column_name TYPE new_type を使用します。値の変換が必要な場合は、USING 句を追加します。たとえば、ALTER COLUMN price TYPE numeric USING price::numeric のように記述します。 PostgreSQL 列を書き換え、既存のデータが新しい型に適合するかどうかを確認します。

デフォルト値が揮発性の場合のみ。 PostgreSQL 11. 定数デフォルト値を指定した ADD COLUMN は、行を書き換えることなくカタログを即座に更新します。関数を呼び出すデフォルト値を指定すると、テーブル全体の書き換えとより強力なロックが強制されます。

いいえ。 PostgreSQL 既存の制約は変更できません。DROP CONSTRAINT で既存の制約を削除し、ADD CONSTRAINT で修正後の制約を追加してください。両方のステートメントをトランザクションで囲むことで、テーブルにルールが適用されない状態が常に発生するようにします。

複数のアクションをカンマで区切ってリストします: ALTER TABLE Book ADD COLUMN price int, ADD COLUMN isbn text. PostgreSQL すべての変更を一度の処理で適用するため、処理速度が速く、テーブルの一貫性も維持されます。

ALTER TABLE table_name ADD PRIMARY KEY (column) または ADD CONSTRAINT pk_name PRIMARY KEY (column) を使用してください。列には一意でNULL以外の値が格納されている必要があります。 PostgreSQL キーが作成される際に、自動的にサポートとなる一意のインデックスを作成します。

RENAMEコマンドは、システムカタログ内のテーブル名のみを更新します。格納されている行、インデックス、制約はそのまま保持され、影響を受けません。古い名前を参照しているビューや関数は、後から更新が必要になる場合があります。

AIアシスタントは、記述された変更内容に基づいてALTER TABLEスクリプトを作成し、ADD、RENAME、制約ステップの順序を正しく設定し、型キャストのためのUSING句を追加します。また、大規模なテーブルを書き換えたり、重いロックを保持したりする操作も警告します。

はい。AIコパイロットが移行をレビューし、ロックやテーブル全体の書き換えについて警告し、バッチ処理や同時インデックス構築を提案し、ラップを推奨します。ping トランザクションの変更により、スキーマの更新をより安全にデプロイできるようになります。