如何删除 postgres 中特定模式中的每个 table?

How to delete every table in a specific schema in postgres?

如何删除特定架构中的所有 table?仅应删除架构中的 table。 我已经有了使用下面的代码获取的所有 table 名称,但是如何删除所有这些 table 名称?

以下是一些psycopg2代码,下面是SQL生成的

writeCon.execute("SELECT table_name FROM information_schema.tables WHERE table_schema='mySchema'")

SELECT table_name FROM information_schema.tables WHERE table_schema='mySchema'

您可以为此使用 anonymous code block

WARNING:这段代码是在玩弄 DROP TABLE 语句,如果你犯了错误,它们真的很严重 ;) CASCADE 选项会删除所有也取决于对象。小心使用!

DO $$
DECLARE
  row record;
BEGIN
    FOR row IN SELECT * FROM pg_tables WHERE schemaname = 'mySchema' 
    LOOP
      EXECUTE 'DROP TABLE mySchema.' || quote_ident(row.tablename) || ' CASCADE';
    END LOOP;
END;
$$;

如果您想删除架构中的所有内容,包括包装器、序列等,请考虑删除架构本身并重新创建它:

DROP SCHEMA mySchema CASCADE;
CREATE SCHEMA mySchema;

对于单行命令,您可以使用 psql 及其 \gexec 功能:

SELECT format('DROP TABLE %I.%I', table_schema, table_name)
FROM information_schema.tables
WHERE table_schema= 'mySchema';\gexec

这将 运行 查询并将每个结果字符串作为 SQL 命令执行。