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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

在使用分区时,通常需要同时删除所有分区。

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);
        RAISE INFO 'Dropped table: %', quote_ident(row.table_schema) || '.' || quote_ident(row.table_name);
    END LOOP;
END;
$$;

SELECT footgun('public', 'tablename');
用户回答回答于

现在用ctrl+click-drag的功能genome-terminal复制所有表的名称。

打开python,执行一些字符串处理(将“”替换为“”,然后“\n”改为“,”),然后得到所有表的逗号分隔列表。

现在在psql shell中做一个drop table CTRL+SHIFT+V你就完蛋了。我知道这太具体了,我只想和大家分享。

扫码关注云+社区