SQuirreL 中的 PostgreSQL 函数定义:未终止的美元引号字符串

PostgreSQL function definition in SQuirreL: unterminated dollar-quoted string

我有以下针对 PostgreSQL 9.3.4 数据库的函数定义:

CREATE OR REPLACE FUNCTION update_modified_timestamp()  
RETURNS TRIGGER AS $$
  BEGIN
    NEW.modified_at = now();
    RETURN NEW; 
  END;
$$ LANGUAGE plpgsql;

当我尝试在 SQuirreL(3.5.3 或 3.6)中执行此操作时,出现以下错误:

Error: ERROR: unterminated dollar-quoted string at or near "$$
 BEGIN
     NEW.modified_at = now()"
  Position: 77
SQLState:  42601
ErrorCode: 0

到目前为止,我已经学会了 can be mitigated by using single quotes 像这样分隔函数体:

CREATE OR REPLACE FUNCTION update_modified_timestamp()  
RETURNS TRIGGER AS '
  BEGIN
    NEW.modified_at = now();
    RETURN NEW; 
  END;
' LANGUAGE plpgsql;

我仍然想知道这是否无法通过其他方式解决 - 我认为这一定是可能的,因为 Flyway 可以执行此脚本并且它使用完全相同的 JDBC 驱动程序在 SQuirreL 中配置。


更新: @a_horse_with_no_name 注意到这个错误与JDBC驱动无关,但是 SQuirreL 如何解析 SQL 语句并将其拆分成块,然后再将它们发送到数据库。因此,剩下的问题是:SQuirreL 可以发送查询吗raw/unparsed?我搜索了很多都找不到这样做的方法。

您可以更改语句分隔符,这样语句就不会拆分为 ;:

转到:会话会话属性SQL语句分隔符

虽然不能改成空字符串,但是可以改成//,这样就可以执行问题中的语句了。