PostgreSQL on duplicate update

PostgreSQL on duplicate update,第1张

概述比如现在有个表,使用来控制用户访问页面权限的, CREATE TABLE user_pages ( id SERIAL PRIMARY KEY, user_id INTEGER NOT NULL DEFAULT 0 ::INTEGER, page_id INTEGER NOT NULL DEFAULT 0 :

比如现在有个表,使用来控制用户访问页面权限的,

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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1172043.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-02
下一篇2022-06-02

发表评论

登录后才能评论

评论列表(0条)

    保存