存在する場合は削除する vs PostgreSQL で削除する
Shihab Sikder
2023年6月20日
DROP
ステートメントは、データベースからテーブルを削除します。 ただし、削除しようとしているテーブルが存在しない場合、DROP
ステートメントだけがエラーを表示します。
DROP IF EXISTS
を使用すると、エラーを解消できます。
PostgreSQL のDROP
とDROP 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=#
説明したように、Sales
は Customer
テーブルに依存しており、このエラーが表示されます。
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