sql - 如何构造一个只有一行列的行文字?
问题描述
我有(在 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,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)');
确实有效。但它看起来很丑。有没有更好的办法?
解决方案
您可以使用 JSON 绕道而行:
select my_count(json_populate_record(null::public.mytable, '{"id": 123}'));
推荐阅读
- unity3d - 统一游戏不能作为可执行文件运行
- javascript - 检查对象数组是否包含一个值
- git - 致命:无法创建工作树目录“SaloonApp。”:无效参数
- javascript - 如何使用 php 将表格中的数据显示到表单输入中(完整/准确描述向下)
- debugging - VSCode 调试在调试 Rust 库时显示所有断点的“位置:0”
- google-cloud-functions - Google 功能无法在云计算中打开和关闭 vm 实例
- javascript - 我似乎无法在我的图书馆应用程序上使用切换开关
- android - 所以我目前正在尝试将应用程序上传到 PlayStore,但我需要将我的 react native 项目从 api lvl 28 升级到 29
- go - golang:嵌套结构到嵌套 json 或 json
- python - Dialogflow api检测意图在Windows上不起作用