如何在 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 函数的返回表中设置标识列?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 RECORD 在 PostgreSQL 中返回多行?