删除 Redshift 架构中的所有表 - 不删除权限

Vzz*_*arr 1 sql amazon-web-services amazon-redshift

我有兴趣删除 Redshift 模式中的所有表。即使此解决方案有效

DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
Run Code Online (Sandbox Code Playgroud)

不是为我好,因为它降低架构权限为好。

一个解决方案,如

DO $$ DECLARE
r RECORD;
BEGIN
    -- if the schema you operate on is not "current", you will want to
    -- replace current_schema() in query with 'schematodeletetablesfrom'
    -- *and* update the generate 'DROP...' accordingly.
    FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = current_schema()) LOOP
        EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE';
    END LOOP;
END $$;
Run Code Online (Sandbox Code Playgroud)

正如该线程中所报告的,如何删除 PostgreSQL 数据库中的所有表? 将是理想的。不幸的是,它不适用于 Redshift(显然不支持for loops)。

有没有其他解决方案来实现它?

dem*_*glu 10

运行此 SQL 并将结果复制并粘贴到您的 SQL 客户端上。如果您想以编程方式执行此操作,则需要围绕它构建一些代码。

SELECT 'DROP TABLE IF EXISTS ' || tablename || ' CASCADE;' 
FROM pg_tables 
WHERE schemaname = '<your_schema>'
Run Code Online (Sandbox Code Playgroud)