sql - 如何使用通配符删除 PostgreSQL 中的多个表

标签 sql postgresql

在处理分区时,通常需要一次删除所有分区。

不过

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/

相关文章:

sql - Oracle SQL 无符号整数

来自不同表的 MySQL 更新状态

c# - 数据不会永久保存到 SQL 表中

postgresql - 通过 Postgres 连接到 Teradata DB

Postgresql 全文搜索分词器

sql - 用单个值和总和替换值集

PHP mysqli_fetch_array 停在 360 结果

PostgreSQL:如果下一个查询与前一个查询相交,则排除下一个查询的几何图形

java - 如何将 postgres 表合并到另一个表中?

sql - postgres/甲骨文 : get last non-null value within group