Я создал триггер для репликации вставок из таблицы 'mytable_db1' в database1 в ту же таблицу 'mytable_db2' в database2. Обе базы данных находятся на одном сервере.postgresql триггер с dblink ничего не возвращает
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.
У кого-нибудь есть предложения о том, что я делаю неправильно?
Спасибо!
Большое спасибо Томмазо! Он работает сейчас! Единственное, что я должен был повторно ввести функцию st_geometry (st_AsText()) для геометрии.Это давало мне сообщение об ошибке из-за различного типа геометрии между двумя таблицами. Таблица db1 находится в геометрии PostGIS, а db2 - в геометрии ArcSDE. – Thierry