Ich muss Werte in einer Spalte aktualisieren, wenn die Zeile mit einer bestimmten WHERE-Klausel übereinstimmt, indem ich den Inhalt einer Textdatei verwende.
Der Inhalt der Datei ist Javascript-Code und kann als solcher einfache Anführungszeichen, doppelte Anführungszeichen, Schrägstriche und umgekehrte Schrägstriche enthalten - aus meiner Sicht könnten andere Sonderzeichen enthalten sein. Der Inhalt der Datei kann nicht geändert werden. Dies muss über psql erfolgen, da das Update über Bash-Skripte automatisiert wird.
Mit dem folgenden Befehl - wobei scriptName
ist eine zuvor deklarierte Bash-Variable -
psql -U postgres db<<EOF
\set script $(cat $scriptName.js))
UPDATE table SET scriptColumn=:script WHERE nameColumn='$scriptName';
EOF
gibt folgenden Fehler zurück
ERROR: syntax error at or near "{"
LINE 1: ...{//...
^
Ich möchte den Inhalt der Datei $scriptName.js
als Klartext behandeln und jegliche Interpretation vermeiden.
Ich habe eine Lösung für mein Problem gefunden, obwohl ich nicht weiß, warum es funktioniert. Ich lasse es hier in der Hoffnung, dass es für jemand anderen nützlich sein könnte oder dass jemand, der besser informiert ist als ich, erklären kann, warum es jetzt funktioniert.
Kurz gesagt, das Setzen der Variable als psql-Parameter hat den Trick gemacht:
psql -U postgres db -v script="$(cat $scriptName.js)"<<EOF
UPDATE table SET scriptColumn=:'script' WHERE nameColumn='$scriptName'
EOF
Ich bin mir nicht sicher, wie sich das von unterscheidet
psql -U postgres db <<EOF
\set script "$(cat $scriptName.js)"
UPDATE table SET scriptColumn=:'script' WHERE nameColumn='$scriptName'
EOF
was ich zuvor versucht habe und gibt folgenden Fehler zurück:
unterminated quoted string
ERROR: syntax error at or near "//"
LINE 1: // dummy text blahblah
Danke an alle die geholfen haben!
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen