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

时间:2015-05-13 09:40:42

标签: sql postgresql plpgsql squirrel-sql

我对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可以执行此脚本并且它使用在SQuirreL中配置的完全相同的JDBC驱动程序。

更新: @a_horse_with_no_name 注意到此错误与JDBC驱动程序无关,而是SQUirreL如何解析SQL语句并在发送之前将其拆分为块到数据库。因此,剩下的问题是: SQuirreL可以发送原始/未解析的查询吗?我搜索了很多,找不到办法做到这一点。

1 个答案:

答案 0 :(得分:9)

您可以更改语句分隔符,以便不在;上分割语句:

转到:会话会话属性 SQL 声明分隔符

即使您无法将其更改为空字符串,您也可以将其更改为//,这样可以执行问题中的语句。