pg_dump を使用して SQL ダンプ ファイルを作成しました。このエクスポート ファイルには、$$ 文字を含む関数が含まれています。psql -f < filename> でファイルをインポートしても問題ありません。
SQLExec タスクを使用して ant でファイルをインポートする場合、次のような例外が発生します。
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);
}
}