-4

以下を使用して、レコードが更新されるたびに起動するトリガーを PostgreSQL 9.1 で定義しました。

CREATE OR REPLACE FUNCTION check() RETURNS TRIGGER AS $$
 BEGIN
   SELECT doubletEngine.checkForDoublet(NEW.id);
 RETURN NEW;
END;
$$ LANGUAGE plpgsql;

DROP TRIGGER IF EXISTS check_upd on people;
CREATE TRIGGER check_upd AFTER UPDATE ON people
  FOR EACH ROW
  WHEN (OLD.* IS DISTINCT FROM NEW.*)
  EXECUTE PROCEDURE check();

メソッド doubletEngine.checkForDouble() は、以下を使用して PL/Java 1.4.3 に導入されました。

CREATE OR REPLACE FUNCTION doubletEngine.checkForDoublet(varchar) RETURNS void AS 'DoubletSearcher.checkForDoublet' LANGUAGE java;

メソッドcheckForDoublet()内で、次を使用してデータベースに接続しようとします

Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://127.0.0.1:5432/db";
c = DriverManager.getConnection(url, "postgres", "postgres");
if ( c == null ) {
   throw new RuntimeException("Could not connect to server");
}

...しかし、c はまだ null です。このコードを IDE から直接呼び出すと完全に機能しますが、トリガーが起動すると、RuntimeException のみがスローされます。見逃しているものはありますか...???

4

1 に答える 1

1

PL/Javaドキュメントによると、接続は次のように取得する必要があります。

Connection conn = DriverManager.getConnection("jdbc:default:connection"); 
于 2012-05-29T12:24:46.023 に答える