在 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 中使用自定义类型并将它们用作函数中的参数的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 在使用自定义类型时只返回一行

使用mybatis中的自定义TypeHandler处理PostgreSQL中的Json类型字段

jOOQ & PostgreSQL:将从复杂 jsonb 中提取的嵌套 json 对象映射到自定义类型

如何将具有自定义枚举类型的数据从 csv 插入现有的 PostgreSQL 表

QML 自定义列表数据类型

1. PostgreSQL-安装和基本配置(学习笔记)