如何删除 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 命令执行。
如何删除特定架构中的所有 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 命令执行。