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

GraphQL:添加计算字段时出现OverLoaded函数错误

如何解决GraphQL:添加计算字段时出现OverLoaded函数错误

我正在尝试使用hasura API将计算字段添加到架构“ abc”中的graphql表“ user”中,但收到以下错误

**Saving computed field Failed**
in table "abc.user": in computed field "allaccounts": function "abc.get_accounts" 
is overloaded. Overloaded functions are not supported

功能已正确添加

  CREATE OR REPLACE FUNCTION abc.get_accounts(id bigint)
    RETURNS VARCHAR immutable AS $$
DECLARE
    value VARCHAR;
BEGIN
    SELECT array_to_string(ARRAY_AGG( name ORDER BY name ASC )::varchar[],','')
           into value
    FROM abc.account
             INNER JOIN abc.user_account ON (account.id=user_account.account_id)
    where user_account.user_id = id group by user_id;
    return value;
END;
$$ LANGUAGE plpgsql;
用户表中存在

id字段。

我能够从下拉列表中选择函数“ get_accounts”,但在添加计算字段时出现错误。任何指导表示赞赏。谢谢。

解决方法

您的功能是overloaded。也就是说,数据库中(至少)具有另一个函数,该函数使用相同的名称和另一个参数列表。

通常,您需要确定有冲突的功能并将其删除(除非您有充分的理由不这样做)。您可以在以下查询中显示“同音异义词”,该查询会生成drop function条语句,您可以直接使用它们:

select format('drop %s %s;',case when proisagg then 'aggregate' else 'function' end,oid::regprocedure) as stmt
from pg_catalog.pg_proc
where proname = 'get_accounts'

贷记给this SO answer中的Erwin Brandstetter,该信中有关于如何解决问题的更多详细信息。

,

添加STABLE对我有用:

CREATE OR REPLACE FUNCTION abc.all_accounts(user_row abc.user)
  RETURNS VARCHAR AS $$
DECLARE
  value VARCHAR;
BEGIN
  SELECT array_to_string(ARRAY_AGG( name ORDER BY name ASC )::varchar[],','')
      into value
               FROM abc.account
                      INNER JOIN abc.user_account ON (account.id=user_account.account_id)
                   where abc.user_account.user_id = user_row.id
               group by user_id;
  return value;
END;
$$ LANGUAGE plpgsql STABLE;

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