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

为什么psql可正常编译的函数在DBeaver中报美元符未终止错误

错误原因

该报错是DBeaver的默认SQL语句拆分规则和PostgreSQL的美元引用语法不兼容导致的:

  • psql客户端原生支持PostgreSQL的$$美元引用语法,会自动识别$$包裹的所有内容属于同一段CREATE FUNCTION语句,不会被代码内部的分号拆分
  • DBeaver默认以分号;作为单条SQL的分隔符,执行时如果没有选中全量代码,会自动将整段代码按分号拆分执行:拆分后最后一段会变成单独的$$;,系统识别到没有对应的起始$$,就会抛出「未终止的美元引用」的42601错误。

你执行的相关代码及报错如下:

SQL Error [42601]: Unterminated dollar quote started at position 0 in SQL $$;. Expected terminating $$.

CREATE OR REPLACE FUNCTION numOf_icd10cm_4_snomed(oldCode TEXT)
RETURNS integer
LANGUAGE plpgsql
AS 
$$

-- This function returns the nunber of icd10cm codes matching oldCode in the table snomed2icd10

DECLARE
   quantity integer;  
BEGIN

   quantity := (select count(maptarget) 
             from 
                snomed2icd10
              where 
                 referencedcomponentid = oldCode
             );
    return quantity;

END;
$$;
解决方案
  • 临时方案:选中整段CREATE FUNCTION的全部代码(从CREATE开头到最后一个分号结束),再点击执行按钮,DBeaver会直接执行选中的完整内容,不会自动拆分
  • 永久方案:修改连接配置,右键对应PostgreSQL连接 -> 编辑连接 -> 选择「SQL编辑器」->「SQL处理」,开启「在美元引号中忽略分号」选项,保存后重启连接即可

内容的提问来源于stack exchange,提问作者Jose Cabrera Zuniga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:18:03