5

Play2.0データベース進化スクリプトでPostgreSQLトリガーを作成しようとしています。SQLコードは比較的簡単で、pgAdminIIIで正常に実行されます。

CREATE OR REPLACE FUNCTION update_modified() RETURNS TRIGGER AS $$
  BEGIN
    NEW.modified = now();
    RETURN NEW;
  END;
$$ LANGUAGE 'plpgsql';

ただし、evolutionを実行するとエラーが発生しますERROR: unterminated dollar-quoted string at or near "$$ BEGIN NEW.modified = now()"。SQLコードは、関数で最初に検出されたセミコロンで切り捨てられるようです。PostgreSQL用の「9.1-901.jdbc4」JDBCドライバーを使用しています。

アップデート:

Evolutions.scalaのコード(219行目以降)は、で単純な分割を実行し;ます。フレームワーク自体に欠陥があるようです:

// Execute script
s.sql.split(";").map(_.trim).foreach {
  case "" =>
  case statement => execute(statement)
}

解決策はありますか?

4

1 に答える 1

2

次のことを試すことができます。

    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();
    }

これがあなたのために働くことを願っています。

于 2012-05-11T16:39:37.763 に答える