Come formattare le virgolette in una query PostgreSQL da uno script bash

Oct 27 2020

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

1 LaurenzAlbe Oct 27 2020 at 14:44

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\""
Philippe Oct 27 2020 at 02:06

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';"
devcloud Oct 27 2020 at 02:10

L'ho risolto usando la risposta di @James Brown sopra:

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