即时通讯在PL / TCL的触发器上工作,插入数据库A的tableA插入数据到数据库B的表B. 两个数据库都在同一台服务器上。 我想出了这个:
CREATE OR REPLACE FUNCTION add_to_erp() RETURNS trigger AS $$ BEGIN IF (TG_OP='INSERT') THEN perform dblink_connect('dbname=oerp_test user=postgres password=abouali'); perform dblink_exec('insert into product_template(standard_price, list_price, name) values ('||NEW.pricebuy||','||NEW.pricesell||','||NEW.name||');'); perform dblink_exec('insert into product_product(product_tmpl_id) values (currval(''product_template_id_seq''::regclass));'); perform dblink_disconnect(); END IF; RETURN NEW; END; $$ LANGUAGE 'plpgsql'; CREATE TRIGGER add_to_erp_trigger AFTER INSERT ON products FOR EACH ROW EXECUTE PROCEDURE add_to_erp();
但是当我尝试:
INSERT INTO products (id,reference,code,name,pricebuy,pricesell,category,taxcat) VALUES (3,3,3,'apple',12,24,'000','000');
我得到:
错误:列“苹果”不存在
如果我尝试,而不是:
INSERT INTO products (id,reference,code,name,pricebuy,pricesell,category,taxcat) VALUES (3,3,3,'34',12,24,'000','000');
其成功
任何想法的原因?
您需要在您正在构build的查询中将名称列的值包含在引号中。 你需要:
perform dblink_exec('insert into product_template(standard_price, list_price, name) values ('||NEW.pricebuy||','||NEW.pricesell||','''||NEW.name||''');');
如果string变成' ,那么你连接apple ,所以最终结果变成values (12,24,'apple')而不是values (12,24,apple)