PostgreSQL语法错误导致提交错误

时间:2010-11-29 04:40:55

标签: postgresql transactions

我们正在努力将单个文件合并到一个PostgreSQL数据库组中。这些文件一直在完全正常工作,当我们合并时,我们运行它们没有任何问题。它开始挂起创建一个触发器,所以我们对触发器进行了评论。下次运行合并文件时,我们收到以下错误:

ERROR: Syntax error at end of input
LINE 181: --$$ LANGUAGE plpgsql 

发生此错误后,出现了后续的语法错误,然后我们在日志文件中发现以下内容:

ERROR: Syntax error at end of input
LINE 181: --$$ LANGUAGE plpgsql 
COMMIT

我们在这个文件中进行了测试,其中包含了不应该输入数据库的测试数据,从而破坏了谁知道数据库中有多少数据。我们查看了所包含的每个文件,并且在任何地方都没有COMMIT

有没有人碰到类似的东西?解析中的错误是否会导致提交?

1 个答案:

答案 0 :(得分:2)

如果您没有BEGIN语句,则PostgreSQL连接处于“自动提交”模式,在语句运行后提交每个更改。由于您错误地评论了代码,我会说您在代码中早先评论了BEGIN语句。但我无法确定,因为您没有提供任何SQL。

请注意语法:

--$$

不会注释掉函数$$的结尾。这意味着空注释是字符串中的最后一件事。如果您将该行读为:

,它可能会对您有所帮助
--
$$

这就是为什么你在“评论”行上得到解析错误的原因。如果它实际上是评论,PostgreSQL不会解析它。 $$是一个封闭SQL代码的引用运算符,它只是一种方便的语法,反对使用'进行引用(这意味着你必须在引用的SQL中引用每个引号)。您认为注释掉的行实际上只是一个以两个连字符结尾的字符串。

一般说明:您应该仅使用注释来向代码添加描述而不禁用代码部分。如果您需要访问旧版本的代码,请使用版本控制。

修改:对引用的字符串说明了解释。希望现在更有意义。