
比如现在有个表,使用来控制用户访问页面权限的,
CREATE table user_pages ( ID SERIAL PRIMARY KEY,user_ID INTEGER NOT NulL DEFAulT 0 ::INTEGER,page_ID INTEGER NOT NulL DEFAulT 0 ::INTEGER,enabled BOolEAN NOT NulL DEFAulT TRUE);create unique index uix_user_page on user_pages(user_ID,page_ID);
理论上每个人每个页面只应该有一条数据,但是我更改或者插入的时候想使用insert onduplicate update 的功能,可以使用 postgresql 提供的FUNCTION 功能
CREATE OR REPLACE FUNCTION replace_into_user_pages(u_ID INTEGER,p_ID INTEGER,en BOolEAN) RETURNS BOolEAN AS $$BEGIN IF EXISTS(SELECT ID FROM user_pages WHERE user_ID = u_ID AND page_ID = p_ID) THEN UPDATE user_pages SET enabled = en WHERE user_ID = u_ID AND page_ID = p_ID; ELSE INSERT INTO user_pages (user_ID,page_ID,enabled) VALUES (u_ID,p_ID,en); END IF; RETURN TRUE;END;$$ LANGUAGE plpgsql;
然后调用 SELECTreplace_into_user_pages(1,1,false) 就行了,但是这样只能一条一条插入,在postgesql 大于等于9.5的版本里面 ,提供了 on conflict 功能,
INSERT INTO user_pages (user_ID,enabled)VALUES (1,TRUE),(1,2,3,FALSE)ON CONFliCT (user_ID,page_ID) DO UPDATE SET enabled = EXCLUDED.enabled;
ref :
https://stackoverflow.com/questions/1109061/insert-on-duplicate-update-in-postgresql
http://www.postgres.cn/docs/9.6/sql-insert.HTML
总结以上是内存溢出为你收集整理的PostgreSQL on duplicate update全部内容,希望文章能够帮你解决PostgreSQL on duplicate update所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)