微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 如何将自定义类型数组传递给Postgres函数

我有自定义类型

CREATE TYPE mytype as (id uuid, amount numeric(13,4));

我想将它传递给具有以下签名的函数

CREATE FUNCTION myschema.myfunction(id uuid, mytypes mytype[])
  RETURNS BOOLEAN AS...

如何在postgres查询调用它,并且不可避免地从PHP调用

解决方法:

您可以使用替代语法与string literal而不是数组构造函数,这是一个类似Postgres函数的构造,当您需要传递值时可能会出现问题 – 就像在预准备语句中一样:

SELECT myschema.myfunc('0d6311cc-0d74-4a32-8cf9-87835651e1ee'
                  , '{"(0d6311cc-0d74-4a32-8cf9-87835651e1ee, 25)"
                    , "(6449fb3b-844e-440e-8973-31eb6bbefc81, 10)"}'::mytype[]);

我在数组中的两个行类型之间添加了换行符以供显示.那是合法的.

如何找到任何文字的正确语法?

这是一个演示:

CREATE TEMP TABLE mytype (id uuid, amount numeric(13,4));

INSERT INTO mytype VALUES
  ('0d6311cc-0d74-4a32-8cf9-87835651e1ee', 25)
 ,('6449fb3b-844e-440e-8973-31eb6bbefc81', 10);

SELECT ARRAY(SELECT m FROM mytype m);

返回:

{"(0d6311cc-0d74-4a32-8cf9-87835651e1ee,25.0000)","(6449fb3b-844e-440e-8973-31eb6bbefc81,10.0000)"}

可能应该注意,任何表(包括临时表)都隐式地创建了同名的行类型.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐