简单的PostgreSQL函数返回行

reb*_*oob 9 postgresql types stored-procedures function

如何将简单的选择查询转换为select * from customerspg中的存储过程/函数?

我是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(...) 要求我嵌入我不想要的行定义.

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

Erw*_*ter 17

问题是"create function x()return setof y"返回一个paren'd逗号分隔的行值,如果没有进一步处理就无法使用

由于函数返回记录/行类型,因此必须使用它来调用它

SELECT * FROM getcustomers();
Run Code Online (Sandbox Code Playgroud)

将返回的行分解为单个列.

关于CREATE FUNCTION手册应该是一个很好的起点.示例部分介绍了此主题.

  • 您先生.. 是绝地武士,不可忽视! (2认同)

Cra*_*ger 13

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

CREATE OR REPLACE FUNCTION getcustomers() RETURNS SETOF customers AS $$
SELECT * FROM customers;
$$ LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)

  • 这有效,谢谢.但是pg似乎只返回一个逗号sep'd值而不是实际列的列,是什么给出的? (2认同)
  • @rebnoob你用`SELECT x FROM getcustomers()x`之类的东西来调用它.你想使用`SELECT getcustomers();`或`SELECT*FROM getcustomers();`. (2认同)