Database/PostgreSQL

[PostgreSQL] DB에 있는 모든 테이블 삭제하기

Ma_Sand 2024. 2. 6. 16:09
반응형

회사에서 릴리즈 파일에 최종 업그레이드 버전 패치쉘을 수행한 후 테스트했었는데, 이후에 다른 테스트를 위해 사용하던 DB의 모든 테이블을 삭제해야 했다.

 

PostgreSQL의 DB 내 모든 테이블을 삭제하는 방법은 다음과 같다.

 

1. pgsql이 설치되어 있는 서버로 들어가 psql로 해당 스키마에 연결한다.

예를 들어 username이 pgpatch이고 dbname이 pgtest라면 아래와 같이 입력한다.

psql -U pgpatch -d pgtest

 

2. 아래 스크립트를 입력한다.

DO $$ DECLARE
    r RECORD;
BEGIN
    FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = current_schema()) LOOP
        EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE';
    END LOOP;
END $$;

 

스크립트 수행 후 이와 같은 문구가 출력되었다면 정상적으로 테이블이 삭제된 것이다.

 

++2024-05-30 추가

시퀀스 전체 삭제 쿼리

DO $$
DECLARE
    sequence_rec RECORD;
BEGIN
    FOR sequence_rec IN
        SELECT sequence_name
        FROM information_schema.sequences
        WHERE sequence_schema = current_schema()
    LOOP
        EXECUTE 'DROP SEQUENCE IF EXISTS ' || sequence_rec.sequence_name || ' CASCADE;';
    END LOOP;
END $$;

 

뷰 전체 삭제 쿼리

DO $$
DECLARE
    view_rec RECORD;
BEGIN
    FOR view_rec IN
        SELECT table_name
        FROM information_schema.views
        WHERE table_schema = current_schema()
    LOOP
        EXECUTE 'DROP VIEW IF EXISTS ' || view_rec.table_name || ' CASCADE;';
    END LOOP;
END $$;

 

반응형