【发布时间】:2016-05-19 16:54:34
【问题描述】:
我创建了一个触发器,用于将数据库 1 中的表“mytable_db1”中的插入复制到数据库 2 上的同一个表“mytable_db2”中。两个数据库都在同一台服务器上。
CREATE OR REPLACE FUNCTION trigger_osm_test_insert()
RETURNS trigger AS
$BODY$
BEGIN
PERFORM dblink_connect('db2', 'dbname=xxx port=5432 user=myusr password=xxx');
PERFORM dblink_exec('db2',
'insert into test.mytable_db2 (osm_id, name, name_eng, name_int, type, z_order, population, last_update, country, iso3, shape)
values ('||new.osm_id||', '''||new.name||''', '''||new.name_eng||''', '''||new.name_int||''', '''||new.type||''', '||new.z_order||',
'||new.population||', '''||new.last_update||''', '''||new.country||''', '''||new.iso3||''',
st_geometry((st_AsText('''||new.shape::text||'''))))');
PERFORM dblink_disconnect('db2');
RETURN new;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION trigger_osm_test_insert()
OWNER TO myusr;
CREATE TRIGGER osm_insert_test
AFTER INSERT
ON mytable_db1
FOR EACH ROW
EXECUTE PROCEDURE trigger_osm_test_insert();
但是,当我进行如下测试插入时:
insert into test.mytable_db1 (name, shape) values ('test', '0101000020E6100000E0979950035F4A40404B2751B0861CC0');
插入的行已插入 mytable_db1,但触发器似乎无法正常工作,因为 mytable_db2 中没有任何内容。插入没有给我任何来自触发器的错误消息。
我正在使用 postgresql 9.2.2。两个数据库都安装了 dblink 1.0 和 postgis 2.0.6。
有人对我做错了什么有建议吗?
谢谢!
【问题讨论】:
标签: postgresql triggers postgis dblink