如何正确传递jsonb[]参数至PostgreSQL SQL函数?
修复PostgreSQL函数调用的数组类型错误
错误原因
你遇到的报错是因为jsonb数组的写法不符合PostgreSQL语法:
- 不能把
::jsonb类型转换符放在数组字面量的元素内部,PostgreSQL无法解析这种格式的数组元素 - 数组内的JSON字符串引号转义处理不当
正确的调用方式
以下两种写法都可以解决问题:
方法1:使用数组构造器(推荐,可读性更高)
用ARRAY[]构造数组,每个元素单独转换为jsonb类型,同时确保uuid参数格式正确:
SELECT create_user_events( 'db74c66d-0000-0000-0000-000000000000'::uuid, -- 补充完整的UUID格式 ARRAY['scr_home'], ARRAY[1], ARRAY['{"key":"value"}'::jsonb], ARRAY[123] );
方法2:给数组字面量整体加类型转换
直接写数组字面量,最后统一转换为jsonb[],注意JSON字符串内的双引号要转义:
SELECT create_user_events( 'db74c66d-0000-0000-0000-000000000000'::uuid, '{scr_home}', '{1}'::int[], '{"{\"key\":\"value\"}"}'::jsonb[], '{123}'::int[] );
额外注意
- 你的第一个参数
_auid是uuid类型,'db74c66d'是不完整的UUID(标准UUID是8-4-4-4-12格式的字符串),真实环境需要传入完整的UUID值,否则会触发invalid input syntax for type uuid错误。
内容的提问来源于stack exchange,提问作者Nikolay Michurin
相关产品推荐
相关产品推荐

