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

Shihab Sikder 2023年6月20日
  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 で削除します。

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

著者: 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