You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hasura PostgreSQL计算字段报错:operator does not exist: bigint = text

问题原因

你遇到的报错和逻辑偏差主要来自两处:

  1. 语法优先级错误:你编写的WHERE id=t.room_id ||' minutes'会被PostgreSQL优先执行||字符串拼接操作,等价于WHERE id = (t.room_id || ' minutes'),rooms表的id为bigint类型,拼接后的结果是文本类型,二者类型不匹配直接触发bigint = text运算符不存在的报错
  2. 逻辑不符合需求:你写的SELECT count(*)是统计符合条件的房间行数,而非取出对应房间的game_length字段值,和要实现的功能不匹配

修正后的SQL函数

CREATE OR REPLACE FUNCTION public.calculate_reservation_total_time(t test)
    RETURNS timestamp with time zone
    LANGUAGE sql
    STABLE
AS $function$  
    SELECT t.start_time + (SELECT game_length FROM rooms WHERE id = t.room_id) * '1 minute'::interval; 
$function$;

补充说明

如果需要兼容房间不存在的异常场景,可以给子查询添加默认值处理,避免返回空值:

CREATE OR REPLACE FUNCTION public.calculate_reservation_total_time(t test)
    RETURNS timestamp with time zone
    LANGUAGE sql
    STABLE
AS $function$  
    SELECT t.start_time + COALESCE((SELECT game_length FROM rooms WHERE id = t.room_id), 0) * '1 minute'::interval; 
$function$;

内容的提问来源于stack exchange,提问作者Logan Rios

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 20:06:01