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로 삭제합니다.

테이블 삭제에 대한 자세한 내용은 다음 공식 문서를 참조하세요.