删除postgreSql中的所有视图

Dropping all views in postgreSql

这似乎是一个非常简单的问题,但我找不到答案!
如何从postgreSQL控制台批量删除视图? 我有10,000次观看,我只是为了测试一些东西,现在我无法摆脱它们!


您可以从元表中选择视图,如下所示(如果使用旧版本,实际选择可能会有所不同,请参见此处,例如http://www.alberton.info/postgresql_meta_info.html)

1
2
3
4
SELECT 'DROP VIEW ' || TABLE_NAME || ';'
  FROM information_schema.views
 WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
   AND TABLE_NAME !~ '^pg_';

因此,您根据实际版本修复此选择,运行它,将结果保存到.sql文件中,然后运行.sql文件。


我添加了这个引用@greg评论的答案,后者又引用了一个名为justbob的用户的答案,这个答案似乎已经消失了。这个评论给了我很多帮助,但很容易被其他人忽视。

虽然它没有回答samachs的问题,因为他的观点已经完成,它可能会帮助像我这样的人在谷歌搜索一种方法来删除批量操作中的所有视图后发现这个问题。

我有一些视图依赖于另一个视图,并由不断发展的脚本生成。因此,将在脚本中添加或删除一些视图。要在添加或删除视图时限制我必须进行更改的位置,我想在脚本开头再将它们全部删除,然后再重新创建它们。

我现在使用的解决方案是在一个单独的模式中创建所有视图,除了视图之外什么都不包含。

在我的脚本开头,我在创建视图之前有以下语句:

1
2
DROP SCHEMA IF EXISTS dbview_schema CASCADE;
CREATE SCHEMA dbview_schema;

之后,我在他们自己的架构中重新创建我的所有视图:

1
2
3
CREATE VIEW dbview_schema.my_view AS
  SELECT * FROM my_table
  ORDER BY my_table.my_column;


测试一下,看看它是否有效。我将这个内存拉出来,因此可能存在一些语法问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
BEGIN TRANSACTION;
    DO $$DECLARE r record;
         DECLARE s TEXT;
        BEGIN
            FOR r IN SELECT table_schema,TABLE_NAME
                     FROM information_schema.views
                     WHERE table_schema = 'public'
            LOOP
                s := 'DROP VIEW ' ||  quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ';';

                EXECUTE s;

                RAISE NOTICE 's = % ',s;

            END LOOP;
        END$$;
    ROLLBACK TRANSACTION;