gpt4 book ai didi

postgresql - PL/代理在存储过程调用中返回不支持的类型

转载 作者:行者123 更新时间:2023-11-29 11:22:35 25 4
gpt4 key购买 nike

我在 PL/Proxy 中设置了一个存储过程来进行查询,并接收一些返回的记录。

在 PL/代理中:

CREATE OR REPLACE FUNCTION query_autocomplete(q text, i_id bigint)
RETURNS SETOF RECORD AS $$
CLUSTER 'autocompletecluster';
RUN ON i_id;
$$ LANGUAGE plproxy;

在每个分区中:

CREATE OR REPLACE FUNCTION query_autocomplete(q text, i_id bigint)
RETURNS SETOF RECORD AS $$
DECLARE
rec RECORD;
BEGIN
FOR rec IN EXECUTE q
LOOP
RETURN NEXT rec;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;

正如您可能已经猜到的那样,这是在 PGSQL 中定义的一个名为“autocompletecluster”的服务器。我发送的查询字符串如下:

$sql = "SELECT * FROM autocomplete WHERE member_id = :memberId";
$query = $this->db->prepare("SELECT query_autocomplete('{$sql}',1234");

它返回以下内容:

SQLSTATE[XX000]: Internal error: 7 ERROR:  PL/Proxy function public.query_autocomplete(0): unsupported type

查询命中的表定义如下:

CREATE TABLE autocomplete (
id character varying(100) NOT NULL,
extra_data hstore,
username character varying(254),
member_id bigint
);

我做错了什么?

最佳答案

该错误强烈表明 PL/Proxy 不支持 SETOF RECORD。尝试定义您的函数以返回 autocomplete%rowtype,否则,RETURNS TABLE (...) 带有匹配的列集。

关于postgresql - PL/代理在存储过程调用中返回不支持的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21392319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com