加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 导入并覆盖重复的行

发布时间:2020-12-13 18:05:43 所属栏目:百科 来源:网络整理
导读:我正在将一些行导入我的postgres数据库,如下所示: psql -U postgres import_test 1432798324_data 我的import_test是我的数据库,1432798324_data文件只是纯文本格式,如: COPY cars FROM stdin;row datarow data....COPY drivers FROM stdin;row datarow d
我正在将一些行导入我的postgres数据库,如下所示:
psql -U postgres import_test < 1432798324_data

我的import_test是我的数据库,1432798324_data文件只是纯文本格式,如:

COPY cars FROM stdin;
<row data>
<row data>
...
.

COPY drivers FROM stdin;
<row data>
<row data>
...
.

(我从答案here获得了这个纯文本文件的格式).

当我导入空白数据库时,此方法正常工作.但是,如果数据库不是空白,并且在导入期间找到任何重复的行,则会出现错误:

ERROR:  duplicate key value violates unique constraint "car_pkey"

有没有办法我可以修改我的导入命令强制覆盖,如果发现重复?换句话说,如果我导入一行并且已经有一行带有该ID,我希望我的新行覆盖它.

您可以导入临时表.然后,您可以在复制新数据之前删除已存在的行:
create temporary table import_drivers as select * from drivers limit 0;

copy import_drivers from stdin;

begin transaction;

delete  from drivers
where   id in
        (
        select  id
        from    import_drivers
        );

insert  into drivers
select  *
from    import_drivers;

commit transaction;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读