我使用 pg_dump 创建了一个 sql 转储文件。此导出文件包含包含 $$ 字符的函数。使用 psql -f <filename> 导入文件没有问题。
如果想使用 ant 使用 SQLExec 任务导入文件,我会收到如下异常:
org.postgresql.util.PSQLException: ERROR: syntax error at or near "$"
有没有办法导入包含 $$ 的文件?
在 postgres 日志中,似乎 SQLExec 任务将 $$ 转换为导致错误的 $。
错误:字符 87 处的“$”或附近的语法错误声明:CREATE FUNCTION process_create_servicenumber() RETURNS trigger LANGUAGE plpgsql AS $ BEGIN IF (TG_OP = 'DELETE') THEN RETURN OLD
这是我的方法
protected void importNewDbFromDumpFile() {
final class SqlExecuter extends SQLExec {
public SqlExecuter() {
Project project = new Project();
project.init();
setProject(project);
setTaskType("sql");
setTaskName("sql");
}
}
try {
SqlExecuter executer = new SqlExecuter();
executer.setSrc(new File(dbDumpFileLocation));
executer.setClasspath(createClasspath());
executer.setEscapeProcessing(true);
executer.setDriver("org.postgresql.Driver");
executer.setUrl("jdbc:postgresql://localhost/test");
executer.setPassword("test");
executer.setUserid("manager");
executer.execute();
} catch (Exception e) {
log.info("Exception importing database ...", e);
}
}