UPDATE Syntax

From: Ulrich Goebel <ml(at)fam-goebel(dot)de>
To: pgsql-de-allgemein(at)lists(dot)postgresql(dot)org
Subject: UPDATE Syntax
Date: 2021-02-03 10:23:12
Message-ID: 7f11697f-35c0-467e-18ec-2fa24fff9cc3@fam-goebel.de
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Guten Morgen,

in einem Python-Skript erzeuge ich ein UPDATE mit folgender Syntax:

update tbl set (col1, col2, ...) = (val1, val2, ...) where id = xx

Das funktioniert, solange in den beiden Listen mehr als eine Spalte bzw.
mehr als ein Wert vorkommen. Ist nur eine Spalte betroffen, gibt es eine
Fehlermeldung:

==========================================================================
cg=# select id, name, vorname, status from tbl_person;
id | name | vorname | status
----+--------+---------+--------
3 | Goebel | Ulrich | a
(1 row)

cg=#
cg=#
cg=#
cg=# update tbl_person set status = 'a' where id=3;
UPDATE 1
cg=#
cg=#
cg=#
cg=# update tbl_person set (status) = ('a') where id=3;
ERROR: source for a multiple-column UPDATE item must be a sub-SELECT or
ROW() expression
LINE 1: update tbl_person set (status) = ('a') where id=3;
^
cg=#
cg=#
cg=#
cg=# update tbl_person set (status, name) = ('a', 'Goebel') where id=3;
UPDATE 1
cg=#
==========================================================================

Tatsächlich kommt es in dem Skript dann vor, dass sowohl UPDATEs mit
einer als auch mit mehreren Spalten anfallen.

Gibt es einen anderen Weg, als dass ich dieses Problem mit einer
Fallunterscheidung abfange? Gut, ich könnte generell auf die Syntax

update tbl set col1=val1, col2=val2, ... where id=xx

umsteigen, das ist aber für die Programmierung etwas umständlicher...

Mit Dank und Gruß
Ulrich

--
Ulrich Goebel
Am Büchel 57, 53173 Bonn

Responses

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Laurenz Albe 2021-02-03 10:27:58 Re: UPDATE Syntax
Previous Message SwissPUG Info 2021-02-01 09:03:56 Online Meetup: PostgreSQL Anwender-Treffen