2016-07-24 7 views
2

Ich versuche, eine Tabelle zu aktualisieren, so dass ich die vorangestellten Nullen aus einer der Spalten entfernen kann. Ich möchte so etwas wie dies zu tun:Update auf Konflikt nichts tun postgres

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

Das Problem ist, dass einige der Zeilen haben bereits die Kennung ohne die vorangestellten Nullen, und da diese Spalte eindeutig sein sollte, wirft es einen Fehler in diesen Fällen. Ist es möglich, so etwas zu tun?

Ich weiß, dass diese bestimmte Abfrage nicht möglich wäre, aber gibt es eine andere Syntax, die das erreichen würde?

+0

Können Sie uns einige Beispiele von Kennungen mit vorangestellten Nullen geben, die gut funktionieren und einig das wirft einen Fehler? – Patrick

Antwort

1

Beispieldaten:

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

Verwendung 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 

Ergebnis:

select * from oh_person; 

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

danke, das hat geholfen! – chris