使用csv文件中的数据更新新列

时间:2017-09-05 15:07:47

标签: sql postgresql csv

我有一个名为users_user的postgres表,其中包含一个名为uuid_unsubscribe的新列空列。

现在我有一个包含420个uuids的csv文件,每个用户一个。

uuids.csv

e0af0a31-3eb3-43d5-9d3d-xxx
e0af0a31-3eb3-43d5-9d3d-yyy
e0af0a31-3eb3-43d5-9d3d-zzz
....

我的问题是,如何更新此表,专门为该文件中的每个用户添加一个新的uuid?我想避免每行手动更新一次。

1 个答案:

答案 0 :(得分:1)

您需要导入UUID值的CSV文件,并为每一行分配一个唯一的标识符,该标识符可与users_user表的主键匹配,然后从已加入的导入列表中更新users_user

这是一种方法。

导入CSV文件 - 假设导入的文件名为imported_uuids,包含UUID值的列名为uuid

将临时序列列添加到users_user表。

alter table users_user
add column seq bigint;

update users_user as a
set seq = rn
from (select user_key_column, row_number() over() as rn from users_user) as x
where x.user_key_column=a.user_key_column;

为导入的UUID值分配一组类似的seq值并运行更新:

update users_user as a
set uuid_unsubscribe = n.uuid
from (select row_number() over() as seq, uuid from imported_uuids) as n
where n.seq = a.seq;

清理。

alter table users_user
drop column seq;

如果您的users_user表已经包含一个包含基于1的数值序列而没有间隙的列,则可以使用该列,而不是像本插图中那样添加seq列。