admin

如何使用通配符在PostgreSQL中删除多个表

sql

使用分区时,通常需要一次删除所有分区。

然而

DROP TABLE tablename*

不起作用。(不考虑使用通配符)。

有没有一种优雅的方法(易于记忆),可以在一个命令中使用通配符删除多个表?


阅读 238

收藏
2021-05-10

共1个答案

admin

使用逗号分隔的列表:

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');
2021-05-10