Sql 未终止的美元报价字符串等于或接近$$

Sql 未终止的美元报价字符串等于或接近$$,sql,postgresql,dbeaver,Sql,Postgresql,Dbeaver,我试图使用DBeaver声明一些变量,并一直遇到这个错误 Unterminated dollar-quoted string at or near "$$ DO $$ DECLARE A integer; B integer; BEGIN END$$; 有什么想法吗?张贴的语法很好。您的问题是客户端应用程序或驱动程序正在破坏查询,可能是因为它不理解美元报价 它可能试图将其拆分为分号上的单独语句,运行: DO$$声明一个整数 B整数 BEGIN-END$$ 作为三个独立的声明。

我试图使用DBeaver声明一些变量,并一直遇到这个错误

Unterminated dollar-quoted string at or near "$$

 DO $$
 DECLARE A integer; B integer;

BEGIN   
END$$;

有什么想法吗?

张贴的语法很好。您的问题是客户端应用程序或驱动程序正在破坏查询,可能是因为它不理解美元报价

它可能试图将其拆分为分号上的单独语句,运行:

  • DO$$声明一个整数
  • B整数
  • BEGIN-END$$
作为三个独立的声明。这将导致报告的错误,例如

$ psql -c 'DO $$ DECLARE A integer;'
ERROR:  unterminated dollar-quoted string at or near "$$ DECLARE A integer;"
LINE 1: DO $$ DECLARE A integer;
           ^
这就是为什么在提问时必须指定客户端驱动程序/应用程序



某些客户端的另一种可能性是,它可能将
$
视为转义查询参数占位符,并将其替换为单个
$
,或者尝试将其替换为服务器端占位符,如
$1
。不过,这并不是这里发生的事情。

DBeaver才是问题所在。切换到PGAdmin,没有其他问题。

从DBeaver 6开始,您可以使用ALT-X(在Windows上)执行脚本,它不会尝试执行涉及美元符号的变量捕获/插值。

DBeaver在脚本中出现SQL语法错误时也会给出此错误。
在我的例子中,它是select计算列中一对不匹配的括号。

根据编辑器中的图标,alt+x执行整个脚本。这是一个更简单的解决方案,但是您也可以突出显示整个查询并执行单个语句,并且不会给出任何错误。