존재하는 경우 삭제 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
를 사용하면 테이블이 존재하지 않는다는 알림이 표시됩니다. 오류가 발생하지 않습니다.
종속된 다른 테이블이 있는 테이블 삭제
두 개의 테이블이 있다고 가정해 보겠습니다. 하나는 판매용이고 다른 하나는 고객 레코드용입니다. 판매
테이블은 고객과 구매를 기록하므로 고객
테이블 삭제는 CASCADE
옵션을 사용하여 수행해야 합니다.
먼저 두 개의 테이블을 생성해 보겠습니다.
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