在处理分区时,通常需要一次删除所有分区。
不过
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');
关于sql - 如何使用通配符删除 PostgreSQL 中的多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4202135/