当前位置: 首页 > 面试题库 >

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

阙博容
2023-03-14
问题内容

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

然而

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');


 类似资料:
  • 问题内容: 考虑2个或更多表: 我希望删除所有与名字“ Sam ”匹配的 用户 及其 订单 。在mysql中,我通常会做左连接。在此示例中,我们不知道userid。 查询的正确格式是什么? 问题答案: http://www.postgresql.org/docs/current/static/sql- delete.html 您也可以使用 http://www.postgresql.org/doc

  • 问题内容: 在MySQL中,您可以使用语法 如何在SQL Server中执行相同的操作? 问题答案: 在此示例中,您可以利用“已删除”伪表。就像是: 显然,您可以执行“已删除输出”。如果您需要在第三张表上加入某些内容,也可以在第二个删除上使用。 作为附带说明,您也可以在插入语句上执行insert。,在更新语句上同时进行insert。和Deleted。*。 编辑: 另外,您是否考虑过在table1上

  • 问题内容: 我有一些自动化过程,这些过程会喷出一堆用有意义的标签标记的Docker映像。标签遵循结构化模式。 有没有一种通过标签查找和删除图像的方法?因此,假设我有图像: 理想情况下,我希望能够做到:docker rmi -tag stuff_ * 有什么好方法可以模拟吗? 问题答案: bash的乐趣:

  • 问题内容: 给定一个字符串,我需要检查是否有多个换行符(\ n)。如果有,我需要将它们转换为一个换行符。 您能告诉我执行此操作的代码吗?谢谢! 问题答案: 试试这个

  • 问题内容: 我已经使用了太多的第三方库(jar文件),所以我的CLASSPATH完全混乱了,因为我必须包括我使用的每个jar文件的路径。 我一直在想是否可以使用通配符()运算符(例如 .jar)将所有jar文件包含在文件夹中。但这似乎不起作用。还有其他方法可以缩短PC上当前看起来像文章;)的CLASSPATH吗? 问题答案: 类路径条目可以包含基本名称通配符,该通配符被认为等效于指定目录中所有扩展

  • 问题内容: 我想轻松删除多个表,而无需在删除查询中实际列出表名,并且要删除的表的前缀为“ wp_” 问题答案: 只需分享其中一种解决方案: mysql> SELECT CONCAT(“ DROP TABLE”, GROUP_CONCAT(TABLE_NAME))as stmt 从information_schema.TABLES WHERE TABLE_SCHEMA =“ your_db_name