从 matlab 进行 PostgreSQL 查询时出现数据类型错误

问题描述 投票:0回答:1

我正在尝试调用一个以单个

UUID
作为参数的数据库函数。当我这样做时:

report_id = "5ed30f08-0de0-47f4-99e8-9aeeb8eb2dfe";

query = "select * public.fn_func($1)";
report_nav = pq_exec_params (conn, query, {report_id});

我明白了:

__pq_exec_params__: fatal error: ERROR:  function public.fn_func(text) does not exist

很明显,有些东西正在将

report_id
转换为 PostgreSQL
text
数据类型。所以我尝试通过将查询更改为以下方式来转换为
UUID

query = "select * public.fn_func($1::uuid)";

但后来我收到这条消息:

no converter found for element oid 1700

我确实已将

uuid-ossp
模块添加到我的数据库中,因此我可以直接针对数据库运行它:

select '5ed30f08-0de0-47f4-99e8-9aeeb8eb2dfe'::uuid;

我使用

octave
v6.4 来执行脚本,在 Ubuntu 22.04 上运行 PostreSQL v14.13。

postgresql matlab postgresql-14
1个回答
0
投票

分配给局部变量

report_id
可以有效地使 UUID 文字类型
text

缺少一个

FROM

query = "select * public.fn_func($1::uuid)";

尝试:

query = "SELECT * FROM public.fn_func($1::uuid)";

但是你真的应该得到这个错误:

错误:“public”处或附近的语法错误

如果这不能解决问题,那么我不确定您的客户如何设法阻止查询。

您可以创建一个(重载?)函数,采用

text
并在函数中进行强制转换(如 Adrian 评论的那样),或者您可以将查询字符串与非类型化文字连接起来:

query = "SELECT * FROM public.fn_func('5ed30f08-0de0-47f4-99e8-9aeeb8eb2dfe')";

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.