【问题标题】:Connection to PostgreSQL using PL/Java in a trigger fails在触发器中使用 PL/Java 连接到 PostgreSQL 失败
【发布时间】:2012-05-29 11:29:09
【问题描述】:

我在 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.checkForDoublet() 被引入 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 仍然为空。直接从我的 IDE 调用此代码效果很好,但是当触发器触发时,它只会抛出 RuntimeException。有什么我想念的吗...???

【问题讨论】:

    标签: postgresql pljava


    【解决方案1】:

    根据 PL/Java documentation 应获得如下连接:

    Connection conn = DriverManager.getConnection("jdbc:default:connection"); 
    

    【讨论】:

      猜你喜欢
      • 2016-11-23
      • 1970-01-01
      • 2021-03-23
      • 2019-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 2021-10-21
      相关资源
      最近更新 更多