postgresql - 在 or $body$,org.postgresql.util.PSQLException: 错误:未结束的美元引用字符串

  显示原文与译文双语对照的内容
150 5

我试图在java项目中使用express来在postgress测试中创建一些表和函数。

我使用这个驱动程序:


<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.2-1003-jdbc4</version>

java类。


@Rule 
public EmbeddedDbTesterRule testDb = new EmbeddedDbTesterRule();//with this you don't neet to call onSetup

@Test
public void testIt() throws Exception {

 try {
 DatabaseCreator databaseCreator = new DatabaseCreator();
 databaseCreator.setDdlFile("HistoryTables.ddl");
 databaseCreator.doCreateDbSchemaFromDdl(testDb.getSqlConnection());
 } catch (Exception e) {
 Assert.fail(e.getMessage());
 }
}

但我得到了这个错误。

org.postgresql.util.PSQLException: 错误:在 $body$ at未终止的$ quoted字符串

这个函数看起来像这样。


CREATE OR REPLACE FUNCTION product_history()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO product_history (id, product_id, edit_ts, name, print_provider_id, description)
 VALUES (nextval('product_history_sequence'), OLD.id, now(), OLD.name, OLD.print_provider_id, OLD.description);
RETURN NULL;
END;
$BODY$
LANGUAGE plpgsql;

创建工作在 PGAdmin 1.14.3和 DBVisualizer 9.0.8中运行良好

时间: 原作者:

50 5

HistoryTables.ddl 中包含 create function 代码? 如果是,错误可能是由 DatabaseCreator的限制引起的。 它从 ; ( 参见源代码的行 127读取从ddl文件读取的语句。 因此,这个函数被分割成多个语句,打乱了语法。

尝试将函数代码移到一个额外的文件中,并将这里文件作为一个语句发送到你的服务器。

原作者:
...