简单的PostgreSQL函数返回行

时间:2013-01-06 01:46:08

标签: postgresql function stored-procedures types

如何将简单的选择查询(如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(...)要求我嵌入我不想要的行定义。

我确信这背后有一个原因,但我很惊讶最常见的用例是这个棘手。

2 个答案:

答案 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;