CREATE TABLE emp (
empname text NOT NULL,
salary integer
);CREATE TABLE emp_audit(
operation char(1) NOT NULL,
stamp timestamp NOT NULL,
userid text NOT NULL,
empname text NOT NULL,
salary integer
);CREATE OR REPLACE FUNCTION process_emp_audit() RETURNS TRIGGER AS $emp_audit$
BEGIN
--
-- 在 emp_audit 里创建一行,反映对 emp 的操作,
-- 使用特殊变量 TG_OP 获取操作类型。
--
IF (TG_OP = 'DELETE') THEN
INSERT INTO emp_audit SELECT 'D', now(), user, OLD.*;
RETURN OLD;
ELSIF (TG_OP = 'UPDATE') THEN
INSERT INTO emp_audit SELECT 'U', now(), user, NEW.*;
RETURN NEW;
END IF;
RETURN NULL; -- 忽略结果,因为它是个 AFTER 触发器
END;
$emp_audit$ language plpgsql;CREATE TRIGGER emp_audit
AFTER INSERT OR UPDATE OR DELETE ON emp
FOR EACH ROW EXECUTE PROCEDURE process_emp_audit()
;上面是手册中的介绍,放在同一个数据库中能够实现触发。现在需要想把表emp放在test1库中,把emp_audit放在test2库中
请教:能不能实现跨库同步触发,在test1中对emp的增删即时对test2库的emp_audit中进行修改,这个在触发中应该做什么修改

解决方案 »

  1.   

    2个库在同一个库应该可以吧,前提你确认可以跨库形式访问表,如:
    select * from test1.test1select * from test2.emp_audit如果能这样访问表,那你的需求就可以实现了
      

  2.   

    postgresql的一个连接只能是一个数据库,这和mysql有区别
    如果要跨库操作,必须安装其附加模块的dblink模块,比较麻烦但postgresql有schema概念,相当于 子数据库
    所以设计数据库的时候,如果库间操作频繁,尽量用schema代替数据库
      

  3.   

    是可以的,但由于进行了跨库操作,所以要用DBLink,参考操作和如下:SELECT dblink_exec('dbname=test1 user=xxx password=yyy'::text, 'select * from test2.emp_audit')