我有一个名为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?我想避免每行手动更新一次。
答案 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
列。