Come formattare le virgolette in una query PostgreSQL da uno script bash
Sto cercando di interrogare un pod Postgres di kubernetes utilizzando uno script bash in cui voglio consentire all'utente di inserire una variabile e quindi utilizzare quella variabile per interrogare. Il mio script bash è il seguente:
#!/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\"'"
Ho provato tutte le combinazioni di virgolette singole e doppie ma non riesco a passare un nome utente di tipo stringa. Tutti i suggerimenti sarebbero apprezzati
Risposte
La soluzione semplice, ma cattiva, è
bash -c "psql -U postgres -c \"Select * from users WHERE last_name='$t'\""
In questo modo la citazione è corretta, ma è vulnerabile all'iniezione SQL. Cosa succede se la variabile tcontiene un valore con una virgoletta singola?
Affrontare questo non è così semplice; l'unico modo in cui potrei pensare è usare psqlvariabili come questa:
echo "Select * from users WHERE last_name = :'var'" | bash -c "psql -U postgres -v var=\"$t\""
Non sei sicuro del motivo per cui hai bisogno di bash, dovrebbe funzionare?
kubectl exec -it postgres-pod -- psql -U postgres -c "SELECT * FROM users WHERE last_name='$t';"
L'ho risolto usando la risposta di @James Brown sopra:
bash -c "psql -U postgres -c \"Select * from users WHERE last_name='$t';\""