0

我对 Postgre SQL 中的 Bucardo 功能有疑问。Bucardo 在几个数据库之间放置了同步表。假设我们在 DB1 和 DB2 中有表 Orders。

create table orders(order_id integer primary key, item_id integer, quantity integer); 

我们正在对 DB1 中的 Orders 表进行更改。

insert into orders(item_id,quantity) values(1,235);

然后 Bucardo 将所有这些更改复制到 DB2 中的 Orders 表。但除了这个同步之外,我希望 Bucardo 修改 DB2 中的表 Stock

create table stock(item_id integer primary key, name varchar(50), quantity integer);

只是为了 item_id = 1 的记录将 DB2 中 stock 表的数量字段减少值 235(插入到 DB1 中订单表的数量字段的值)。是否可以通过这种方式自定义 Bucardo?实现此功能的最佳方法是什么?

4

1 回答 1

0

这将很难实现,因为 bucardo 不会基于 SQL 语句进行复制。但是,您可以在主数据库 DB1 上使用存储过程并复制该表。

create or replace function stock_func() returns trigger as $$
DECLARE
    val int;
BEGIN
    val := NEW.quantity #do you addition or subtraction here
    #add your update statement below 
    execute 'UPDATE stock set .....;
    return NULL;
END;
$$ language plpgsql;

 create trigger update_stock before insert on address for each row execute procedure stock_func();
于 2016-07-26T15:38:17.090 回答