存在する場合は削除する vs PostgreSQL で削除する

  1. PostgreSQL のDROPDROP IF EXISTS
  2. 他のテーブルが依存しているテーブルを削除する
存在する場合は削除する vs PostgreSQL で削除する

DROP ステートメントは、データベースからテーブルを削除します。 ただし、削除しようとしているテーブルが存在しない場合、DROP ステートメントだけがエラーを表示します。

DROP IF EXISTS を使用すると、エラーを解消できます。

PostgreSQL のDROPDROP IF EXISTS

データベースに存在しないテーブルを削除してみましょう。

例:

postgres=# drop table account;
ERROR:  table "account" does not exist
postgres=#

postgres=# drop table if exists account;
NOTICE:  table "account" does not exist, skipping
DROP TABLE
postgres=#

drop を使用すると、テーブルが存在しないというエラーが表示されます。 ただし、drop table if exists を使用すると、テーブルが存在しないという通知が表示されます。 エラーは発生していません。

他のテーブルが依存しているテーブルを削除する

販売用と顧客レコード用の 2つのテーブルがあるとします。 Sales テーブルは顧客とその購入を記録するため、Customer テーブルの削除は CASCADE オプションで行う必要があります。

最初に 2つのテーブルを作成しましょう。

CREATE TABLE Customer(
    id INT PRIMARY KEY,
    full_name VARCHAR,
    branch VARCHAR
);

CREATE TABLE Sales(
    id INT PRIMARY KEY,
    item_name VARCHAR,
    price DECIMAL,
    customer_id int,
    FOREIGN KEY (customer_id) REFERENCES Customer(id)
);

それでは、Customer テーブルを削除してみましょう。

postgres=# drop table customer;
ERROR:  cannot drop table customer because other objects depend on it
DETAIL:  constraint sales_customer_id_fkey on table sales depends on table customer
HINT:  Use DROP ... CASCADE to drop the dependent objects too.
postgres=#

説明したように、SalesCustomer テーブルに依存しており、このエラーが表示されます。

DROP ステートメントで CASCADE オプションを試してください。 方法は次のとおりです。

postgres=# DROP TABLE IF EXISTS Customer CASCADE;
NOTICE:  drop cascades to constraint sales_customer_id_fkey on table sales
DROP TABLE
postgres=#

これで、テーブル Customer が削除されました。

ここでは、Customer テーブルが存在するかどうかを確認しています。 存在する場合は、CASCADE で削除します。

テーブルの削除について詳しくは、次の公式 ドキュメント を参照してください。

チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
著者: Shihab Sikder
Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website

関連記事 - PostgreSQL Table