Ale*_*aev 5 postgresql materialized-views sql-drop
I\xe2\x80\x99在我的 PostgreSQL 中有一个视图,它可以是正常的也可以是具体化的,具体取决于某些情况。我正在尝试编写一个查询,该查询肯定会删除视图,并且无论它目前的类型是什么,都不会出现错误。然而,这似乎并不容易。当我尝试使用以下代码时,出现错误:
\n\nDROP VIEW IF EXISTS {{ schema }}.{{ viewName }};\nDROP MATERIALIZED VIEW IF EXISTS {{ schema }}.{{ viewName }};\nRun Code Online (Sandbox Code Playgroud)\n\n\xc2\xa0
\n\nSQLSTATE[42809]: Wrong object type: 7 ERROR: "{{ viewName }}" is not a view \nHINT: Use DROP MATERIALIZED VIEW to remove a materialized view. \nRun Code Online (Sandbox Code Playgroud)\n\n因此,当视图具体化时,\xe2\x80\x98IF EXISTS\xe2\x80\x99 在第一行结果为 true,DROP 命令启动,但由于视图类型错误而失败(这是不正常的) 。谁能提出一种既适用于物化视图又适用于普通视图的通用解决方法?
\n没有。无论如何,这并不容易……正如 Postgres 报道的那样,这两者是不同的动物。
我认为 ifexists 起作用的原因是,这一切都驻留在 pg_class 中。如果您创建一个测试表并尝试运行drop view if exists test,您将收到类似的错误。
作为一个不太好的解决方法,您可以在检查 pg_catalog.pg_class 中实体的类型以确定您正在处理的内容的精确类型(表、视图、mat 视图)之后在 DO 块中生成动态 SQL 语句, ETC。)。
| 归档时间: |
|
| 查看次数: |
6662 次 |
| 最近记录: |