我对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可以发送原始/未解析的查询吗?我搜索了很多,找不到办法做到这一点。
答案 0 :(得分:9)
您可以更改语句分隔符,以便不在;
上分割语句:
转到:会话→会话属性→ SQL →声明分隔符
即使您无法将其更改为空字符串,您也可以将其更改为//
,这样可以执行问题中的语句。