如何在 PostgreSql 函数的返回表中设置标识列?

Posted

技术标签:

【中文标题】如何在 PostgreSql 函数的返回表中设置标识列?【英文标题】:How can I set identity column in return table of PostgreSql Function? 【发布时间】: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;

【问题讨论】:

【参考方案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 并不表示该函数会创建表。它只是意味着结果看起来像一个表,即有几行。该表不是持久的,因此指定在其中插入行时应该发生什么是没有意义的。

【讨论】:

以上是关于如何在 PostgreSql 函数的返回表中设置标识列?的主要内容,如果未能解决你的问题,请参考以下文章

在 Postgresql 中创建一个不返回复合值的函数

如何显示 PostgreSQL 函数返回的列标题?

如何使用 RECORD 在 PostgreSQL 中返回多行?

在 PostgreSQL 中返回表的用户定义函数

将表传递给 postgreSQL 函数,执行 select 语句,返回表

在简单的 PostgreSQL 函数返回表中避免“歧义列”