代码之家  ›  专栏  ›  技术社区  ›  Kristen D.

PostgreSQL语法错误eof导致提交

  •  0
  • Kristen D.  · 技术社区  · 14 年前

    我们正在将单个文件合并到一个组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 回复  |  直到 14 年前
        1
  •  2
  •   jmz    14 年前

    如果你没有 BEGIN 语句,则PostgreSQL连接处于“自动提交”模式,在运行语句后提交每个更改。由于您对代码的注释不正确,我认为您对 开始 代码前面的语句。但我不能确定,因为您没有提供任何SQL。

    注意语法:

    --$$
    

    不注释函数的结尾 $$ . 它的意思是空注释作为字符串中的最后一个东西。如果你把这句话读成:

    --
    $$
    

    这就是为什么在“commented”行上会出现解析错误。如果它真的被注释了,PostgreSQL不会解析它。 $$ 是一个包含SQL代码的引号运算符,它只是一种方便的语法,不允许使用 ' 's表示引用(这意味着您必须在引用的SQL中对每个引用进行双引号)。你认为被注释掉的一行实际上只是一段以两个连字符结尾的字符串。

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

    编辑: 澄清了对引用字符串的解释。希望现在这更有意义。