我们正在努力将单个文件合并到一个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
!
有没有人碰到类似的东西?解析中的错误是否会导致提交?
答案 0 :(得分:2)
如果您没有BEGIN
语句,则PostgreSQL连接处于“自动提交”模式,在语句运行后提交每个更改。由于您错误地评论了代码,我会说您在代码中早先评论了BEGIN
语句。但我无法确定,因为您没有提供任何SQL。
请注意语法:
--$$
不会注释掉函数$$
的结尾。这意味着空注释是字符串中的最后一件事。如果您将该行读为:
--
$$
这就是为什么你在“评论”行上得到解析错误的原因。如果它实际上是评论,PostgreSQL不会解析它。 $$
是一个封闭SQL代码的引用运算符,它只是一种方便的语法,反对使用'
进行引用(这意味着你必须在引用的SQL中引用每个引号)。您认为注释掉的行实际上只是一个以两个连字符结尾的字符串。
一般说明:您应该仅使用注释来向代码添加描述而不禁用代码部分。如果您需要访问旧版本的代码,请使用版本控制。
修改:对引用的字符串说明了解释。希望现在更有意义。