먼저, 당신이 할 수있는 delete many tables in a single statement :
DROP TABLE mystuff_table_1, mystuff_table_2, mystuff_table_3 CASCADE;
다음으로, 테이블을 모두 개로 나눌 수 있습니다. 스키마. 이 스키마를 사용자의 기본 search_path
에 추가하면 모두 투명합니다.
그런 다음 당신이 필요하다 : 그 정도로 짧은 아니라면
DROP SCHEMA foo CASCADE;
이 명령을 실행하는 기능을 만들 수 있습니다.
정적 SQL 기능 :
CREATE OR REPLACE FUNCTION f_delete12() RETURNS void AS
$func$
DROP TABLE mystuff_table_1, mystuff_table_2, mystuff_table_3, ... CASCADE;
$func$ LANGUAGE sql VOLATILE;
아니면 동적 PL/pgSQL의 기능 :
CREATE OR REPLACE FUNCTION f_delete12()
RETURNS void AS
$func$
BEGIN
EXECUTE (
SELECT 'DROP TABLE ' || string_agg('mystuff_table_' || g, ', ')
|| ' CASCADE'
FROM generate_series(1,12) g -- numbers 1 to 12
);
END
$func$ LANGUAGE plpgsql VOLATILE;
전화 : 훨씬 더 동적 명령문에 대한
SELECT f_delete12();
:
How do I drop all tables in psql (PostgreSQL interactive terminal) that starts with a common word?
데이터 모델이 매우 이상하게 보입니다. "번호가 매겨진"테이블이있을 때마다 모델이 정규화되지 않았 음을 나타내는 강한 표시입니다. –
이것은 실제로 내 테이블의 이름이 아니라 내 테이블에 번호가 매겨지지 않은 것입니다. 그 질문은 정규화와 관련이 없다. 가까이에있는 주제에 집중하십시오. – jononomo
테이블에 번호가 매겨지지 않은 경우 왜 그런 사례를 보여 줍니까? 번호가 매겨진 테이블 (또는 그것들의 예)은 항상 모델에 관한 어떤 것이 틀렸고 단일 테이블만으로 충분할 것이라는 의심을 제기하여 전체 질문을 무효로 만듭니다. "난독 화"예제를 사용할 때 사람들이 다른 것을 위해 당신의 모범을 보게되면 놀라지 않을 것입니다. 당신이 간단하게 "나는 많은 관련없는 테이블을 떨어 뜨려야하고 나는 매번 모든 이름을 쓰고 싶지 않다"라고 쓰고 있다면 - 나는 당신의 모델에 의문을 제기하지 않을 것이다. –