2016-07-24 12 views
2

テーブルの更新を試みて、カラムの先頭からゼロを削除できるようにしています。私はこのような何かをしたい:conflict on update何もしないpostgres

UPDATE oh_person SET identifier = TRIM(LEADING '0' FROM identifier) 

問題は、行のいくつかはすでにプリペンドゼロのない識別子を持っているということであり、この列がユニークであることを意味するので、それらのインスタンスでエラーがスローされます。このようなことは可能でしょうか?

UPDATE oh_person SET identifier = TRIM(LEADING '0' FROM identifier) ON CONFLICT (identifier) DO NOTHING 

私は、その特定のクエリが可能ではないことを知っているが、それを達成するであろう他のいくつかの構文がありますか?

+0

あなたは私たちだけで罰金といくつかの仕事プリペンドゼロで識別子のいくつかの例を与えることができますそれはエラーを投げる? – Patrick

答えて

1

例データ:

create table oh_person(identifier text unique); 
insert into oh_person 
values ('012'), ('0012'), ('0015'), ('015'); 

使用anonymous code block

do $$ 
declare 
    r record; 
begin 
    for r in 
     select identifier 
     from oh_person 
     where left(identifier, 1) = '0' 
    loop 
    begin 
     update oh_person 
     set identifier = trim(leading '0' from identifier) 
     where identifier = r.identifier; 
    exception 
     when unique_violation then 
      raise notice '% not updated', r.identifier; 
    end; 
    end loop; 
end $$; 

NOTICE: 0012 not updated 
NOTICE: 015 not updated 

結果:

select * from oh_person; 

identifier 
------------ 
0012 
015 
12 
15 
(4 rows) 
+0

ありがとう、これは助け! – chris

関連する問題