首页 > 解决方案 > 如何构造一个只有一行列的行文字?

问题描述

我有(在 Postgres v12 中)一个函数,它将一行作为参数并从引用的表中返回一个计数。简化示例:

CREATE OR REPLACE FUNCTION public.my_count(my public.mytable) RETURNS bigint
  LANGUAGE sql STABLE
  AS $$
    SELECT count(id) FROM public.another_table WHERE another_table.my = 'foo' AND another_table.my_id=my.id;
  $$;

该函数的签名由外部要求固定,它由中间件调用。

现在我想单独使用这个函数,希望不必为mytable作为参数的行构造一个完整的 '()' 行文字,因为我只需要.id它,而不是其他列。

SELECT my_count('(123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)');

确实有效。但它看起来很丑。有没有更好的办法?

标签: sqlpostgresql

解决方案


您可以使用 JSON 绕道而行:

select my_count(json_populate_record(null::public.mytable, '{"id": 123}'));

推荐阅读