【问题标题】:How can I set identity column in return table of PostgreSql Function?如何在 PostgreSql 函数的返回表中设置标识列?
【发布时间】:2019-12-19 09:19:58
【问题描述】:
CREATE OR REPLACE FUNCTION public."TestFunc"
(     
    "param1" TEXT, 
    "param2" TEXT 
) 
RETURNS TABLE  
( 
  ---------How can I set identiy like that
  "ID" integer GENERATED BY DEFAULT AS IDENTITY (START WITH 1 INCREMENT BY 1),
  "Data" TEXT
)  
AS $$
BEGIN  
    ---body...
END; 
$$ LANGUAGE plpgsql;

【问题讨论】:

    标签: postgresql stored-functions set-returning-functions


    【解决方案1】:

    你不能也不需要。

    identity 不是一种数据类型,它是一个属性,用于描述在插入未指定值的行时如何生成值。一旦生成并存储了列值,“身份”属性就没有意义了。

    所以只需将您的结果列定义为integer

    CREATE OR REPLACE FUNCTION public."TestFunc"
    (     
        "param1" TEXT, 
        "param2" TEXT 
    ) 
    RETURNS TABLE  
    ( 
      "ID" integer,
      "Data" TEXT
    )  
    AS $$
    BEGIN  
        ---body...
    END; 
    $$ LANGUAGE plpgsql;
    

    stop using 引用标识符。它们带来的麻烦远多于它们的价值。

    【讨论】:

    • 我没有设置 "ID" ,我想自动增加。我该怎么办?
    • @İlyasDerse:您需要在生成该函数结果的代码(---body--- 部分)中执行此操作。
    【解决方案2】:

    RETURNS TABLE 并不表示该函数会创建表。它只是意味着结果看起来像一个表,即有几行。该表不是持久的,因此指定在其中插入行时应该发生什么是没有意义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 2022-12-20
      • 2021-09-27
      • 2019-12-15
      相关资源
      最近更新 更多