如何将 record/row 传递给函数

How to pass a record/row to a function

我正在尝试了解如何将 row/record 作为 postgresql 中函数的参数传递,并且 我发现这个已经存在的问题 ,其中所选答案很好地解释了如何使用 array_agg() 函数将 table 作为参数传递。

那么函数的参数是一个table类型的数组,数组的每个元素匹配一行和数组元素的每个字段,可以读取使用 。表示法,匹配一行的列。

答案中没有解释的是如何只传递一个 record/row 作为参数,我的想法是传递一个 tablename%ROWTYPE 类型的变量,然后使用 .像这样访问记录的每个字段的符号:variable.field1、variable.field2 等等。

这是正确的吗?如果不是,我如何将具有 table 行类型的记录作为参数传递给函数?

该函数应接受与您的 table 类型相同的参数。这是一个 returns 布尔值的示例,您可以使用它来过滤 table (类似于 where 子句,但这只是一个示例)

CREATE FUNCTION isvisible(p_row myTable)  RETURNS BOOLEAN
AS $BODY$
  select p_row.myCol = 'whatever';
$BODY$ 
LANGUAGE sql IMMUTABLE;

select * from myTable  t where t.isvisible;
select * from myTable  t where isvisible(t);
select * from myTable  t where isvisible(t.*);