例子:CREATE TABLE public.test(id bigserial NOT NULL,name text);ALTER TABLE public.testADD CONSTRAINT test_constraint_pkey PRIMARY KEY(id);CREATE TABLE public.v_test(id bigserial NOT NULL,v_id bigint,v_name text);ALTER TABLE public.v_testADD CONSTRAINT v_test_constraint_pkey PRIMARY KEY(id);CREATE OR REPLACE RULE insert ASON INSERT TO test DO INSERT INTO v_test (v_id, v_name)VALUES (new.id, new.name);然后执行insert into test(name)values('1'),('2'),('3')test.id中的值v_test.v_id在postgresql 9.5/9.6上测试,从PPA安装http://apt.postgresql.org/pub/repos/apt操作系统ubuntu服务器14.04/16.04 最佳答案 事实上不是这样。这就是Postgresql支持中所说的这是预期的行为,因为规则的工作方式类似于宏,并且有一个不稳定的参数(即,对串行列的默认值)传递给它并执行两次。听着,你写的相当于插入测试(id,name)值(nextval('test_id_seq'),'1'),(nextval('test_id_seq'),'2'),(nextval('test_id_seq'),'3');然后执行,然后规则使其也被执行:插入v_test(v_id,v_name)值(nextval('test_id_seq'),“1”),(nextval('test_id_seq'),'2'),(nextval('test_id_seq'),'3');你似乎想要的是用扳机更可靠地完成。关于sql - 奇怪的规则适用于在PostgreSQL 9.5/9.6上插入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41063440/
10-12 23:04