"$$ 处或附近未终止的美元引号字符串

Unterminated dollar-quoted string at or near "$$

我正在尝试使用 DBeaver 声明一些变量并不断遇到此错误。

Unterminated dollar-quoted string at or near "$$

 DO $$
 DECLARE A integer; B integer;

BEGIN   
END$$;

有什么想法吗?

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

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

  • DO $$ DECLARE A integer;
  • B integer;
  • 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;
           ^

这就是为什么您在提问时必须指定您的客户driver/application。


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

DBeaver 是问题所在。切换到 PGAdmin,没有更多问题。

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

当脚本中存在 SQL 语法错误时,

DBeaver 也会给出此错误。 在我的例子中,这是 select 计算列中的一对不匹配的括号。