HOWTO · PostgreSQL
존재하는 경우 삭제 vs PostgreSQL에서 삭제
경우에 따라 다른 외래 키 참조가 있는 경우 DROP 문에 오류가 표시됩니다. 테이블이 존재하지 않으면 삭제하는 동안 오류도 표시됩니다.
이 페이지의 내용
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로 삭제합니다.
테이블 삭제에 대한 자세한 내용은 다음 공식 문서를 참조하세요.