vou*_*rus 2 postgresql materialized-views sql-view
出于性能原因,我的数据库中有一个物化视图。环境的约束已经改变,现在我需要使更新出现得更快,视图本身的性能不再那么重要。如何将物化视图更改为常规视图?寻找类似的东西:
ALTER MATERIALIZED VIEW viewname TO VIEW
Run Code Online (Sandbox Code Playgroud)
由于物化视图和视图是数据库中的不同对象,因此您需要删除物化视图并根据您的物化视图创建视图。
\n您可以SELECT通过两种方式显示物化视图中的语句:
方式一:使用指令
\n\\d+ viewname\nRun Code Online (Sandbox Code Playgroud)\n方法 2:SELECT在内表上执行操作
SELECT definition FROM pg_matviews WHERE matviewname=\'viewname\';\nRun Code Online (Sandbox Code Playgroud)\n上面列出的两个命令都将显示SELECT在物化视图上使用的命令,因此您可以在文本编辑器中复制以进行粘贴。
下一步是DROP物化视图并创建新的,如下所示:
DROP MATERIALIZED VIEW viewname;\nRun Code Online (Sandbox Code Playgroud)\n最后一步是创建视图:
\nCREATE VIEW viewname AS <paste your SELECT statement here>\nRun Code Online (Sandbox Code Playgroud)\n并且,瞧\xc3\xa1。手动方式完成
\n如果您无法进行复制/粘贴,我们可以使用的另一个选项是创建一个函数来转换数据。如下:
\nCREATE TABLE mytable (id int, name varchar);\nINSERT INTO mytable (1, \'John\');\nINSERT INTO mytable (2, \'Mary\');\nRun Code Online (Sandbox Code Playgroud)\n以上面创建的 mytable 为例
\nCREATE MATERIALIZED VIEW mymatview1 AS SELECT * FROM mytable;\nRun Code Online (Sandbox Code Playgroud)\n基于mytable创建物化视图。
\nCREATE OR REPLACE FUNCTION frommaviewttoview(VARCHAR) \nRETURNS VOID as $$\n DECLARE\n mymatview ALIAS FOR $1; \n tomatview VARCHAR;\n BEGIN\n SELECT definition INTO tomatview\n FROM pg_matviews\n WHERE matviewname=$1;\n EXECUTE \'DROP MATERIALIZED VIEW \'||mymatview;\n EXECUTE \'CREATE VIEW \'||mymatview||\' AS \'||tomatview;\n END;\n$$ LANGUAGE plpgsql;\nRun Code Online (Sandbox Code Playgroud)\n创建了一个将物化视图转换为视图的函数
\n\\d\nRun Code Online (Sandbox Code Playgroud)\n并且,\\d我们可以看到从我的测试中提取的物化视图信息,如下图所示。
该函数获取定义并执行DROP MATERIALIZED VIEW原始CREATE MATERIALIZED VIEW物化SELECT视图的定义。
因此,如果您有索引物化视图,则需要采取更多控制,因此,如果有任何引用块,您的物化视图可能不会被排除,并且需要执行额外的控制。
\n| 归档时间: |
|
| 查看次数: |
2013 次 |
| 最近记录: |