So formatieren Sie Anführungszeichen in einer PostgreSQL-Abfrage aus einem Bash-Skript

Oct 27 2020

Ich versuche, einen kubernetes Postgres-Pod mithilfe eines Bash-Skripts abzufragen, bei dem der Benutzer eine Variable eingeben und diese Variable dann zum Abfragen verwenden soll. Mein Bash-Skript lautet wie folgt:

#!/bin/bash

echo "give a last name"


read t

kubectl exec -it postgres-pod -- bash -c "psql -U postgres -c 'Select * from users WHERE last_name=\"$t\"'"

Ich habe alle Kombinationen von einfachen und doppelten Anführungszeichen ausprobiert, kann jedoch keinen Benutzernamen vom Typ Zeichenfolge übergeben. Anregungen wäre dankbar

Antworten

1 LaurenzAlbe Oct 27 2020 at 14:44

Die einfache, aber schlechte Lösung ist

bash -c "psql -U postgres -c \"Select * from users WHERE last_name='$t'\""

Dies macht das Zitat richtig, ist aber anfällig für SQL-Injection. Was ist, wenn die Variable teinen Wert mit einem einfachen Anführungszeichen enthält?

Damit umzugehen ist nicht so einfach; Ich kann mir nur vorstellen, psqlVariablen wie diese zu verwenden:

echo "Select * from users WHERE last_name = :'var'" | bash -c "psql -U postgres -v var=\"$t\""
Philippe Oct 27 2020 at 02:06

Nicht sicher, warum Sie Bash brauchen, sollte dies funktionieren?

kubectl exec -it postgres-pod -- psql -U postgres -c "SELECT * FROM users WHERE last_name='$t';"
devcloud Oct 27 2020 at 02:10

Ich habe es mit der obigen Antwort von @James Brown gelöst:

bash -c "psql -U postgres -c \"Select * from users WHERE last_name='$t';\""