gpt4 book ai didi

postgresql - 如何使用 SQL 查询删除 PostgreSQL 中的所有模式?

转载 作者:行者123 更新时间:2023-11-29 11:59:42 24 4
gpt4 key购买 nike

我需要删除数据库中的所有模式,除了 publicinformation_schema 和那些 LIKE 'pg_%'

这是我发现的:(这个变体似乎不起作用)

   CREATE OR REPLACE FUNCTION drop_all () 
RETURNS VOID AS
$$
DECLARE rec RECORD;
BEGIN
-- Get all the schemas
FOR rec IN
SELECT DISTINCT schemaname
FROM pg_catalog.pg_tables
-- You can exclude the schema which you don't want to drop by adding another condition here
WHERE schemaname NOT LIKE 'pg_%' AND schemaname != 'public'
AND schemaname != 'information_schema'
LOOP
EXECUTE 'DROP SCHEMA ' || rec.schemaname || ' CASCADE';
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;

SELECT drop_all();

另一种变体:(这个可能有效但仍然使我的应用程序崩溃)

SELECT string_agg(format('DROP SCHEMA %I CASCADE;', nspname), E'\n')
FROM pg_namespace WHERE nspname != 'public'
AND nspname NOT LIKE 'pg_%'
AND nspname != 'information_schema';

因此,我想确保查询是正确的,或者希望找到查询的另一个变体。

有人可以帮我找到另一个查询吗?

最佳答案

它只删除任何表的架构,因为您正在使用查询:

 SELECT DISTINCT schemaname
FROM pg_catalog.pg_tables

所以没有任何表的模式不会被删除。

你必须使用不同的查询

SELECT n.nspname AS "Name",
pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner"
FROM pg_catalog.pg_namespace n
WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'

关于postgresql - 如何使用 SQL 查询删除 PostgreSQL 中的所有模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31627223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com