ubuntuusers.de

BASH / PostgreSQL: $psql Verständnisproblem

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

michahe

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

Hallo, mein PostgreSQL psql UPDATE-Statement will nicht:

psql --username "name" "UPDATE \"Schema\".\"T XX Daten\" SET \"FileName\" = '$FileName' WHERE \"ID\" = ${arrFilesRename[0]};"
#psql: Fehler: fehlendes »=« nach »UPDATE« in der Zeichenkette der Verbindungsdaten

Die Inhalte der Variablen habe ich geprüft. Wie wäre die Syntax richtig?

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4449

Wohnort: Göttingen

Also, es fehlt auf jeden Fall ein -c vor dem Update-Kommando (siehe psql-Manpage).

Bei dem ganzen Quoting bin ich mir nicht sicher, also z.B. bei

\"FileName\"

bräuchtest Du die Double-Quotes gar nicht, denke ich, und damit könntest Du Dir auch das Escapen sparen. Oder vielleicht Single-Quotes statt Double-Quotes verwenden, dann sparst Du Dir das Escapen auch. Aber ich bin mir da nicht ganz sicher.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13149

Führ mal unter set -x aus. Falls arrFilesRename keine Zahlen enthält, fehlen da auf jeden Fall Single Quotes.

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

Was ist set -x? ich habe es ausgeführt:

$ set -x
++ history -a
++ history -c
++ history -r
++ history -a
++ history -c
++ history -r
++ echo -ne '\033]0;user@Maschine:/mnt/Daten\007'

arrFilesRename enthält definitiv nur Zahlen.

Mein aktuelles psql-Statement und die Ausgabe, ob mit oder ohne Anführungszeichen:

$ psql --username "name" --dbname "dbname" --command= "UPDATE \"SchemaName\".\"T Daten\" SET \"Titel\" = 'XYZneu' WHERE \"ID\"=3447;"
psql: Warnung: überflüssiges Kommandozeilenargument »UPDATE \"SchemaName\".\"T Daten\" SET \"Titel\" = 'XYZneu' WHERE \"ID\"=3447;ignoriert.

Der Datensatz wird nicht geändert! Was kann ich tun?

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

TryAndError: Dass Gleichheitszeichen hinter COMMAND ist nicht erlaubt. So funktioniert es:

$ psql --username "name" --dbname "dbname" --command "UPDATE \"SchemaName\".\"T Daten\" SET \"Titel\" = 'XYZneu' WHERE \"ID\"=3447;"

schragge

Anmeldungsdatum:
27. Januar 2022

Beiträge: 181

Das Gleichheitszeichen ist sehr wohl erlaubt, aber ohne Leerzeichen danach.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13149

michahe schrieb:

Was ist set -x? ich habe es ausgeführt:

Eine Shell-Option, die Debug-Ausgaben produziert.

$ set -x
++ history -a
++ history -c
++ history -r
++ history -a
++ history -c
++ history -r
++ echo -ne '\033]0;user@Maschine:/mnt/Daten\007'

Du musst das Kommando ausführen während set -x aktiv ist. Wenn Du das Zurückschalten sparen willst, kannst Du das so machen:

1
( set -x; psql --username "name" --dbname "dbname" --command= "UPDATE \"SchemaName\".\"T Daten\" SET \"Titel\" = 'XYZneu' WHERE \"ID\"=3447;" )

Kopieren und in ein Terminal einfügen.

Antworten |