免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1515 | 回复: 0
打印 上一主题 下一主题

MySQL中on duplicate key update 在PostgesSQL中的实现方式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-10 15:19 |只看该作者 |倒序浏览
MySQL中on duplicate key update username = VALUES(username),maxdate = VALUES(maxdate),

在PostgresSQL中如何实现呢?



MySQL中的语句:

insert into db select distinct username ,mindate,maxdate from test_table on duplicate key update username = VALUES(username),maxdate = VALUES(maxdate);



PostgresSQL中实现:

步骤一:创建表

CREATE TABLE db (username TEXT, userid TEXT ,mindate TEXT ,maxdate TEXT);



步骤二:创建唯一索引

CREATE UNIQUE INDEX username_index ON db (username);



步骤三:创建更新函数

CREATE FUNCTION merge_db(uname TEXT, uid TEXT ,mind TEXT , maxd TEXT) RETURNS VOID AS

$$

BEGIN

    LOOP

        -- first try to update the username

        UPDATE db SET maxdate = maxd WHERE username = uname;

        IF found THEN

            RETURN;

        END IF;

        -- not there, so try to insert the username

        -- if someone else inserts the same useridconcurrently,

        -- we could get a unique-useridfailure

        BEGIN

            INSERT INTO db(username,userid,mindate,maxdate) VALUES (uname, uid, mind,maxd);

            RETURN;

        EXCEPTION WHEN unique_violation THEN

            -- do nothing, and loop to try the UPDATE again

        END;

    END LOOP;

END;

$$

LANGUAGE plpgsql;

u=2674742952,2686370839&fm=0&gp=0.jpg (6.87 KB, 下载次数: 10)

u=2674742952,2686370839&fm=0&gp=0.jpg
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP