在PostgreSQL中,通配符删除表是指使用模式匹配(pattern matching)来批量删除符合特定命名模式的表。PostgreSQL本身不直接支持在DROP TABLE
语句中使用通配符,但可以通过查询系统目录表并结合动态SQL来实现这一功能。
DO $$
DECLARE
table_name text;
BEGIN
FOR table_name IN
SELECT tablename
FROM pg_tables
WHERE schemaname = 'public'
AND tablename LIKE 'your_pattern%' -- 替换为你的表名前缀/模式
LOOP
EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(table_name) || ' CASCADE';
RAISE NOTICE 'Dropped table: %', table_name;
END LOOP;
END $$;
CREATE OR REPLACE FUNCTION drop_tables_like(pattern text) RETURNS void AS $$
DECLARE
table_record record;
BEGIN
FOR table_record IN
SELECT tablename
FROM pg_tables
WHERE schemaname = 'public'
AND tablename LIKE pattern
LOOP
EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(table_record.tablename) || ' CASCADE';
RAISE NOTICE 'Dropped table: %', table_record.tablename;
END LOOP;
END;
$$ LANGUAGE plpgsql;
-- 使用示例
SELECT drop_tables_like('temp_%');
-- 生成删除语句但不执行
SELECT 'DROP TABLE IF EXISTS ' || quote_ident(tablename) || ' CASCADE;'
FROM pg_tables
WHERE schemaname = 'public'
AND tablename LIKE 'your_pattern%';
-- 如果确认无误,可以复制输出结果并执行
CASCADE
会级联删除依赖对象(如视图、外键等),谨慎使用public
模式,可根据需要修改RAISE NOTICE
或只生成SQL语句来验证%
:匹配任意数量的任意字符_
:匹配单个任意字符