【问题标题】:Drop table if exists else proceed for next step in function using PostgreSQL如果存在则删除表,否则使用 PostgreSQL 继续执行下一步功能
【发布时间】:2023-04-04 18:01:01
【问题描述】:

我正在尝试删除表(如果存在),否则使用 PostgreSQL 9.3 版本继续执行下一步功能。

示例

  Create or replace function test(tablename varchar)
  returns setof record as
  $$
  Declare
        var1 varchar :='table_';
  Begin
        var1 :=var1 ||tablename;
        /* Here need to drop table if exists */
       drop table if exist var1;

       /* else proceed for next step */
       ....
       ....
   end;
   $$
   language plpgsql;

【问题讨论】:

  • drop table 在您的Function 中有效吗?

标签: postgresql


【解决方案1】:

尝试使用EXECUTE

EXECUTE 'DROP TABLE IF EXISTS ' || var1;

【讨论】:

  • 做了同样的改变。但只收到表不存在的通知不会继续下一个过程。
  • @Meem 问题可能出现在您的下一个过程中,因为IF EXISTS 应该在表格不存在时显示通知,因此看到通知没有任何问题
  • 是的!我知道了。非常感谢。
【解决方案2】:

您需要使用execute 运行DROP TABLE 命令,如下所示(正如@FuzzyTree 已经在我之前指出的那样)

execute 'drop table ' || var1;

(或)

execute 'DROP VIEW ' || var1;

还有另一个指针,非易失性函数中不允许使用 DROP TABLE。因此,您可能必须将函数的最后一行更改为

LANGUAGE 'plpgsql' VOLATILE;

查看这篇文章,会让你有更好的想法How to delete table *or* view from PostgreSQL database?

【讨论】:

  • 我做到了。但不继续下一步,只通知该表不存在。
  • 不!我已经像“如果存在则删除表”一样使用它。
  • @Meem,您必须使用IF .. ELSE 构造有条件地进行删除。检查我在回答中提到的链接。这会让你得到你想要做的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 2022-12-01
  • 2010-10-17
  • 1970-01-01
相关资源
最近更新 更多