gpt4 book ai didi

postgresql - 在一个查询中删除 Postgresql 9.3 中的普通 View 或物化 View

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

我在我的 PostgreSQL 中有一个 View ,它可以是正常的也可以是物化的,这取决于某些情况。我正在尝试编写一个查询,该查询可以确定地删除 View ,并且无论当前的类型如何,都不会出现错误。然而,这似乎并不容易。当我尝试使用以下代码时,出现错误:

DROP VIEW IF EXISTS {{ schema }}.{{ viewName }};
DROP MATERIALIZED VIEW IF EXISTS {{ schema }}.{{ viewName }};

SQLSTATE[42809]: Wrong object type: 7 ERROR:  "{{ viewName }}" is not a view  
HINT: Use DROP MATERIALIZED VIEW to remove a materialized view.

因此,看起来“IF EXISTS”在 View 实体化时第一行结果为真,DROP 命令启动,但由于 View 类型错误(不正常)而失败。谁能提出一个既适用于物化 View 又适用于普通 View 的通用解决方法?

最佳答案

没有。或者不容易,无论如何......正如 Postgres 所报道的那样,这两者是不同的动物。

我认为 if exists 起作用的原因是因为这一切都驻留在 pg_class 中。如果您创建一个测试表,并尝试运行 drop view if exists 测试,您将得到类似的错误。

在检查 pg_catalog.pg_class 中的实体类型以确定您正在处理的对象的精确类型(表、 View )之后,作为一个不太好的解决方法,您可以在 DO block 中生成动态 SQL 语句、垫 View 等)。

关于postgresql - 在一个查询中删除 Postgresql 9.3 中的普通 View 或物化 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19524220/

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