我整个下午都在寻找这个问题而没有运气。
我已尝试使用规则和触发器并获得相同的行为。我可以通过使用'psql'手动将记录插入数据库来创建规则或触发器并在本地测试它,但当我尝试使用JAVA应用程序远程插入记录时,触发器不会触发。
一个简单的例子就是:
我有一个表“Customer_Address”,其中包含字段:
我尝试创建规则和触发器,以便当新记录仅使用zipcode插入“Customer_Address”时,我的触发器/规则将采用zipcode并使用嵌套子查询来查询City&从查找表中查看然后设置City&使用嵌套子查询的返回值的状态字段。
只有当我使用'psql'在数据库服务器上本地插入记录时,我才能使用触发器或规则来解决问题。
如果我尝试使用JAVA App远程插入记录,则记录插入正常,但触发器和规则永远不会触发。
我甚至尝试过命令“alter table Customer_Address enable始终触发update_address_trig”;
但触发器永远不会从远程插入触发。规则也是如此。由于触发器和规则在本地从psql命令行工作正常,并且由于其余字段从JAVA App插入,我相当确定我的触发器/规则语法正确以及正确配置的数据库的远程可访问性我甚至在psql命令行和JAVA App中使用相同的DB用户。
我为MS SQL Server找到了解决此问题的各种解决方案,但没有找到Postgresql的解决方案。
有人有什么想法吗?为什么Trigger的行为与本地vs远程插入的行为不同?
提前谢谢!准将
触发代码为:
create or replace function update_event_stage() returns trigger as
$$
begin
update Event_stage set EventCity = (select primarycity from zipmap where zipcode = Event_stage.Event_ZipCode) where EventCity is null;
RETURN NEW;
end
$$ LANGUAGE plpgsql;
create trigger update_event_stage_trig
AFTER INSERT or UPDATE on event_stage
FOR EACH ROW EXECUTE PROCEDURE update_event_stage();
alter table Event_stage enable always trigger update_event_stage_trig;
** * *** (最终添加)评论02/26/2014 20:40 PST) ** * ** * ** *
好的再次感谢,但我之前看过调试文档信息并添加了RAISE子句但我没有错误因此为什么我问他们应该去哪里因为我想也许我在错误的地方使用它们。
无论如何仍然没有错误,Firebug中没有任何内容,java App插入到表中但没有触发器触发。使用psql手动插入会触发并根据编码的zipcode查找更新City。
我会继续攻击它,我只发布了因为我在其他数据库中看到了这些,例如Oracle& SQl Server有一些特定的参数影响了这样的行为,并认为Postgres可能有相同的但可能没有记录,但我猜不是。
如果我没有看到触发器和规则在本地工作正常我会怀疑我的触发器编码是错误的但是看到它们按照psql本地设计工作让我认为这是除触发器编码之外的其他问题。
THX!