检查PostgreSql中多行的唯一数据

时间:2017-03-17 20:22:36

标签: sql postgresql

我有,假设用户名是唯一的,我需要在一个查询中插入许多用户(可能是数千个用户)。如果用户名已存在,检查每个用户的最佳方法是什么?使用PostgreSql。

3 个答案:

答案 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

注意最后一行,主键序列已更新三次,没有明显效果。

Check the syntax of 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);