在 PostgreSQL 中使用自定义类型并将它们用作函数中的参数
Posted
技术标签:
【中文标题】在 PostgreSQL 中使用自定义类型并将它们用作函数中的参数【英文标题】:Working with custom types in PostgreSQL and use them as arguments in functions 【发布时间】:2018-10-31 10:46:31 【问题描述】:请帮助我,为什么我得到错误功能不存在?
[2018-10-31 12:31:05] [42883] 错误:函数 companytester(bigint, unknown, unknown, unknown, unknown) 不存在
提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。
CREATE OR REPLACE FUNCTION companyTester(founder Founder) RETURNS BOOLEAN AS $$
BEGIN
RAISE NOTICE 'Founder id: %',founder.founder_id;
RAISE NOTICE 'Founder FirstName: %',founder.firstname;
RAISE NOTICE 'Founder LastName: %',founder.lastname;
RAISE NOTICE 'Founder email: %',founder.email;
RAISE NOTICE 'Founder password %',founder.f_password;
END;
$$ LANGUAGE plpgsql;
SELECT companyTester(76565445354,'Maks','Burkov','Maks.Burkov88@gmail.com','+_@Maks88;
CREATE TYPE Founder AS (
founder_id BIGINT,
firstname VARCHAR(150),
lastname VARCHAR(150),
email VARCHAR(50),
f_password VARCHAR(50)
);
【问题讨论】:
【参考方案1】:您正在向函数传递 5 个参数,但它被声明为只接受一个参数(founder
类型)
您需要row constructor 来创建founder
的正确实例,因此只传递一个参数:
SELECT companyTester(
(76565445354,'Maks','Burkov','Maks.Burkov88@gmail.com','+_@Maks88')::founder
);
表达式(76565445354,'Maks','Burkov','Maks.Burkov88@gmail.com','+_@Maks88')::founder
是单个值
您也可以使用:
SELECT companyTester(row(76565445354,'Maks','Burkov','Maks.Burkov88@gmail.com','+_@Maks88'));
【讨论】:
以上是关于在 PostgreSQL 中使用自定义类型并将它们用作函数中的参数的主要内容,如果未能解决你的问题,请参考以下文章
使用mybatis中的自定义TypeHandler处理PostgreSQL中的Json类型字段
jOOQ & PostgreSQL:将从复杂 jsonb 中提取的嵌套 json 对象映射到自定义类型