존재하는 경우 삭제 vs PostgreSQL에서 삭제

Shihab Sikder 2023년6월20일
  1. PostgreSQL의 ‘DROP’ 대 ‘DROP IF EXISTS’
  2. 종속된 다른 테이블이 있는 테이블 삭제
존재하는 경우 삭제 vs PostgreSQL에서 삭제

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 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