postgresql – 错误:未终止的带引号的字符串在或接近
发布时间:2020-12-13 16:44:26 所属栏目:百科 来源:网络整理
导读:当使用ANT执行下面显示的触发代码时,我得到错误 org.postgresql.util.PSQLException: ERROR: unterminated quoted string at or near "' DECLARE timeout integer"Position: 57 我可以成功地执行下面的代码通过PGADmin(由postgres提供)和命令行实用程序“ps
当使用ANT执行下面显示的触发代码时,我得到错误
org.postgresql.util.PSQLException: ERROR: unterminated quoted string at or near "' DECLARE timeout integer" Position: 57 我可以成功地执行下面的代码通过PGADmin(由postgres提供)和命令行实用程序“psql”,并添加了触发器功能,但是通过ANT执行时,它每次失败 BEGIN TRANSACTION; CREATE OR REPLACE FUNCTION sweeper() RETURNS trigger as ' DECLARE timeout integer; BEGIN timeout = 30 * 24 * 60 * 60 ; DELETE FROM diagnosticdata WHERE current_timestamp - teststarttime > (timeout * ''1 sec''::interval); return NEW; END; ' LANGUAGE 'plpgsql'; -- Trigger: sweep on diagnosticdata CREATE TRIGGER sweep AFTER INSERT ON diagnosticdata FOR EACH ROW EXECUTE PROCEDURE sweeper(); END;
我有与Liquibase使用的JDBC驱动程序相同的问题。
看起来驱动程序以分号结尾的每行都会以单独的SQL命令运行。这就是为什么下面的代码将由JDBC驱动程序按以下顺序执行: > CREATE OR REPLACE FUNCTION test(text)返回无效为’DECLARE tmp text 当然,这是无效的SQL并导致以下错误: unterminated dollar-quoted string at or near ' DECLARE tmp text 要纠正这一点,您需要在每行结束后使用反斜杠分号: CREATE OR REPLACE FUNCTION test(text) RETURNS void AS ' DECLARE tmp text; BEGIN tmp := "test"; END;' LANGUAGE plpgsql; 或者,您可以将整个定义放在一行中。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |