I am trying to create a PostgreSQL trigger in a Play2.0 database evolution script. The sql code is relatively easy and runs fine in pgAdminIII:
CREATE OR REPLACE FUNCTION update_modified() RETURNS TRIGGER AS $$
BEGIN
NEW.modified = now();
RETURN NEW;
END;
$$ LANGUAGE 'plpgsql';
However, I get an error when running the evolution: ERROR: unterminated dollar-quoted
string at or near "$$ BEGIN NEW.modified = now()"
. The SQL code seems to get truncated at
the first semicolon encountered in the function. I am using the "9.1-901.jdbc4" JDBC driver for PostgreSQL.
Update:
The code in Evolutions.scala (line 219+) performs a simple split on the ;
. Seems to be faulty in the framework itself:
// Execute script
s.sql.split(";").map(_.trim).foreach {
case "" =>
case statement => execute(statement)
}
Any solutions?
You can try the following thing.
String sql = "CREATE OR REPLACE FUNCTION update_modified() RETURNS TRIGGER AS $$ " +
"BEGIN " +
"NEW.modified = now(); " +
"RETURN NEW; " +
"END; " +
"$$ LANGUAGE 'plpgsql';";
DataSource ds = getDataSource();
try {
Connection conn = ds.getConnection();
conn.setAutoCommit(true);
Statement st = conn.createStatement();
st.executeUpdate(sql);
st.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
Hope this will work for you.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With