【问题标题】:Trying to create computed field in Hasura with a custom function尝试使用自定义函数在 Hasura 中创建计算域
【发布时间】:2020-11-15 09:54:37
【问题描述】:

我正在尝试将 Hasura Computed Fields 与名为 player 的表一起使用来组合 firstName 和 lastName 列。下面是我复制和更改文档中显示的示例。

CREATE FUNCTION player_full_name(player_row players)
RETURNS TEXT AS $$
    SELECT player_row.firstName || ' ' || player_row.lastName
$$ LANGUAGE sql STABLE;

返回以下错误:

SQL Execution Failed
postgres-error : missing FROM-clause entry for table "player_row"

【问题讨论】:

    标签: sql postgresql graphql hasura


    【解决方案1】:

    顺便说一句,它可能与您的问题没有直接关系,但是对于 postgres,只要您有列名,如果有任何大写,它需要您引用您的字段,所以在这种情况下,您需要以下函数:

    CREATE FUNCTION player_full_name(player_row players)
    RETURNS TEXT AS $$
        SELECT player_row."firstName" || ' ' || player_row."lastName"
    $$ LANGUAGE sql STABLE;
    

    请注意列名周围的双引号,postgres 会自动将所有列小写,我相信这就是 hasura 在他们的示例中选择蛇形大小写的原因。

    我还注意到您在函数 player_row players 中引用了您的函数,请确保末尾的 players 部分与您的表的确切名称匹配。

    【讨论】:

    • 就是这样!报价单是必需的。谢谢。
    【解决方案2】:

    您的列是否命名为firstNamelastName

    first_namelast_name 作为players 表中的列,我能够通过共享函数重现错误。

    我相信您的选择是重命名列 first_name --> firstName 和 last_name --> lastName 或将全名函数定义为:

    CREATE FUNCTION player_full_name(player_row players)
    RETURNS TEXT AS $$
        SELECT player_row.first_name || ' ' || player_row.last_name
    $$ LANGUAGE sql STABLE;
    

    【讨论】:

    • 我的列被命名为 firstName 和 lastName。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 2021-04-24
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    相关资源
    最近更新 更多