我有,假设用户名是唯一的,我需要在一个查询中插入许多用户(可能是数千个用户)。如果用户名已存在,检查每个用户的最佳方法是什么?使用PostgreSql。
答案 0 :(得分:2)
您可以使用k = Key(bucket)
k.key = s3_key_name
k.set_contents_from_file(file_handle, cb=progress, num_cb=20, reduced_redundancy=use_rr )
子句,例如
on conflict
注意最后一行,主键序列已更新三次,没有明显效果。
答案 1 :(得分:1)
将您的用户名设置为PRIMARY KEY
,然后引擎会为您进行检查而不会有额外的麻烦
alter table table_name add primary key (username);
如果您已经拥有PK,可以添加约束
alter table table_name add constraint constraint_name UNIQUE (username);
答案 2 :(得分:1)
如果您想要查看尚未插入的行或仅查看那些行,我不清楚。但是这两个要求都可以使用writeable CTEs:
来完成假设下表:
create table some_table (id serial primary key, user_name text unique);
查看(仅)已插入的行:
insert into some_table (user_name)
values
('Tom'), ('Dick'), ('Harry'), ('Arthur'), ('Mary'), ('Ford'), ('Tom'), ('Zaphod')
on conflict do nothing
returning user_name;
要查看已插入不的行:
with new_data (name) as (
values
('Tom'), ('Dick'), ('Harry'), ('Arthur'), ('Mary'), ('Ford'), ('Tom'), ('Zaphod')
), inserted as (
insert into some_table (user_name)
select name
from new_data
on conflict do nothing
returning user_name
)
select *
from new_data
where name not in (select user_name from inserted);