使用分区时,通常需要一次删除所有分区。
然而
DROP TABLE tablename*
不起作用。(不考虑使用通配符)。
有没有一种优雅的方法(易于记忆),可以在一个命令中使用通配符删除多个表?
使用逗号分隔的列表:
DROP TABLE foo, bar, baz;
如果您确实需要脚枪,这可以做到:
CREATE OR REPLACE FUNCTION footgun(IN _schema TEXT, IN _parttionbase TEXT) RETURNS void LANGUAGE plpgsql AS $$ DECLARE row record; BEGIN FOR row IN SELECT table_schema, table_name FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_schema = _schema AND table_name ILIKE (_parttionbase || '%') LOOP EXECUTE 'DROP TABLE ' || quote_ident(row.table_schema) || '.' || quote_ident(row.table_name) || ' CASCADE '; RAISE INFO 'Dropped table: %', quote_ident(row.table_schema) || '.' || quote_ident(row.table_name); END LOOP; END; $$; SELECT footgun('public', 'tablename');