반응형
회사에서 릴리즈 파일에 최종 업그레이드 버전 패치쉘을 수행한 후 테스트했었는데, 이후에 다른 테스트를 위해 사용하던 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 $$;
반응형