如何将简单的选择查询(如select * from customers
)转换为pg中的存储过程/函数?
我是Postgres的新手,create function customers() as returns table/setof
只是感觉不对,因此问题就在这里。
我理解触发器在pg land中被称为“函数”。因此 不存在,我唯一的选择是创建视图或函数。问题是create procedure
create function x() returns setof y
返回一个paren'd逗号分隔的值,如果没有进一步处理就无法使用(至少这是我在pgAdmin和Ruby / Sequel中看到的)。
create function x() returns table(...)
要求我嵌入我不想要的行定义。
我确信这背后有一个原因,但我很惊讶最常见的用例是这个棘手。
答案 0 :(得分:16)
问题是“创建函数x()返回setof y”返回一个paren'd 逗号分隔的行值,不能在没有进一步使用的情况下使用 处理
由于函数返回记录/行类型,因此必须使用
调用它SELECT * FROM getcustomers();
将返回的行分解为单个列。
manual on CREATE FUNCTION应该是一个很好的起点。示例部分介绍了此主题。
答案 1 :(得分:13)
未经测试但应该是正确的:
CREATE OR REPLACE FUNCTION getcustomers() RETURNS SETOF customers AS $$
SELECT * FROM customers;
$$ LANGUAGE sql;