我在PL / Proxy中设置了一个存储过程来进行查询,并收回一些RECORD。
在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'的定义的SERVER。我发送的查询字符串如下:
$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
);
我做错了什么?
答案 0 :(得分:1)
该错误强烈暗示PL / Proxy不支持SETOF RECORD
。请尝试定义您的函数以返回autocomplete%rowtype
,或者如果失败,请RETURNS TABLE (...)
使用匹配的列集。