返回行的简单PostgreSQL函数

返回行的简单PostgreSQL函数,postgresql,function,stored-procedures,types,Postgresql,Function,Stored Procedures,Types,如何将一个简单的select查询(如select*from customers)转换为pg中的存储过程/函数 我是Postgres的新手,create function customers()as returns table/setof感觉不对,因此这里的问题就来了 我知道程序在pg land中被称为“函数”。因此,create procedure不存在,我唯一的选择是创建视图或函数。问题是create function x()返回一组y返回一行由逗号分隔的值,如果不进行进一步处理,这些值将无法

如何将一个简单的select查询(如
select*from customers
)转换为pg中的存储过程/函数

我是Postgres的新手,
create function customers()as returns table/setof
感觉不对,因此这里的问题就来了

我知道程序在pg land中被称为“函数”。因此,
create procedure
不存在,我唯一的选择是创建视图或函数。问题是
create function x()返回一组y
返回一行由逗号分隔的值,如果不进行进一步处理,这些值将无法使用(至少我在pgAdmin和Ruby/Sequel中看到了这一点)

create function x()返回表(…)
要求我嵌入我不想嵌入的行定义


我相信所有这些背后都有一个原因,但我很惊讶最常见的用例是如此棘手。

未经测试,但应该是正确的:

CREATE OR REPLACE FUNCTION getcustomers() RETURNS SETOF customers AS $$
SELECT * FROM customers;
$$ LANGUAGE sql;
问题是“create function x()返回y的集合”返回一个paren'd 逗号分隔的行值,未经进一步处理无法使用

函数返回一行。要分解为各个列,请使用以下命令调用它:

SELECT * FROM getcustomers();
假设函数定义了正确的返回类型。见:


这应该是一个很好的起点。示例部分介绍了此主题。

@rebnoob而不是“不起作用”-指定您尝试的函数的全文、产生的错误消息以及您的PostgreSQL版本。太好了!谢谢欧文和克雷格。这个问题回答得对吗?这很有效,谢谢。但是pg似乎只返回一个带有逗号sep'd值的列,而不是实际的列,这有什么好处?@rebnoob您使用类似于
selectx fromGetCustomers()x
的东西来调用它。您想使用
选择getcustomers()
从getcustomers()中选择*。先生。。你是一个绝地武士,是一股值得尊敬的力量!浪费了一天时间去了解问题所在。我调用的函数没有“*from”部分,EF Core给出了关于db模型映射的错误。因为数据是逗号分隔的。谢谢:)我得到这个
返回“record”的函数需要一个列定义列表
@TheRealChx101:请参阅: