首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PostgreSQL中使用通配符删除多个表

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

Stack Overflow用户
提问于 2010-11-17 14:49:43
回答 7查看 88.4K关注 0票数 92

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

然而,

DROP TABLE tablename*

不起作用。(不支持通配符)。

有没有一种优雅的(读起来很容易记住的)方法,可以用一个通配符在一个命令中删除多个表?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-11-17 15:19:22

使用逗号分隔的列表:

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');
票数 128
EN

Stack Overflow用户

发布于 2012-01-27 16:15:09

这是对这个问题的另一个老生常谈的答案。它可以在ubuntu上运行,也许还可以在其他一些操作系统上运行。在postgres命令提示符下执行\dt (在我的例子中,命令提示符是在postgres内部运行的)。然后,您将在终端中看到许多表格。现在使用genome-terminalctrl+click-drag功能复制所有表的名称。

打开python,执行一些字符串处理(将'‘替换为’',然后将'\n‘替换为’,'),您将得到所有表的逗号分隔列表。现在,在psql shell中执行一个drop table CTRL+SHIFT+V,就完成了。我知道这太具体了,我只是想分享一下。:)

票数 31
EN

Stack Overflow用户

发布于 2016-07-27 22:36:29

我用了这个。

echo "select 'drop table '||tablename||';' from pg_tables where tablename like 'name%'" | \
    psql -U postgres -d dbname -t | \
    psql -U postgres -d dbname

替换为dbnamename%的相应值。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4202135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档