当我在CONFLICT子句旁边创建更新RULE时,将抛出该错误。
这是我的冲突代码
insert_query = "INSERT INTO my_company (id, name, login, logout) VALUES %s\
ON CONFLICT (id) DO NOTHING"
我的更新规则
CREATE RULE log_shoelace AS ON UPDATE TO my_company
WHERE NEW.login <> OLD.login or NEW.logout <> OLD.logout
DO INSERT INTO my_company VALUES (
new.id, new.name, new.login, new.logout, new.interval_time, current_date);
my_company表字段包含ID,名称,登录名。登出,interval_time,今天。
如果有任何数据更新,则将这些数据插入同一表中。 但是在这里我不能同时使用CONFLICT和RULE。那么在这种情况下我该怎么办?
谢谢。
创建表和创建序列进行测试:
CREATE SEQUENCE IF NOT EXISTS my_company_id_seq;
CREATE TABLE public.my_company
( id integer NOT NULL DEFAULT nextval('my_company_id_seq'::regclass)
, name character varying(50)
, login time without time zone
, logout time without time zone
, interval_time time without time zone
, today date DEFAULT CURRENT_DATE
, CONSTRAINT my_company_pkey PRIMARY KEY (id)
);
答案 0 :(得分:0)
ON CONFLICT
指令应放在您的规则正文中:
CREATE RULE log_shoelace AS
ON UPDATE TO my_company
WHERE NEW.login <> OLD.login or NEW.logout <> OLD.logout
DO
INSERT INTO my_company VALUES (
new.id, new.name, new.login, new.logout, new.interval_time, current_date)
ON CONFLICT (id) DO NOTHING
可以说,ON CONFLICT
伪指令仅在目标表具有某些约束来推迟冲突时才起作用。否则,您将遇到运行时错误,例如:
No unique or exclusion constraint matching the ON CONFLICT specification.