Como formatar aspas em uma consulta PostgreSQL a partir de um script bash

Oct 27 2020

Estou tentando consultar um pod Postgres do Kubernetes usando um script bash onde quero permitir que o usuário insira uma variável e, em seguida, use essa variável para consultar. Meu script bash é o seguinte:

#!/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\"'"

Eu tentei todas as combinações de aspas simples e duplas, mas não consigo passar um nome de usuário do tipo string. Qualquer sugestão seria apreciada

Respostas

1 LaurenzAlbe Oct 27 2020 at 14:44

A solução simples, mas ruim, é

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

Isso acerta aspas, mas é vulnerável à injeção de SQL. E se a variável tcontiver um valor com aspas simples?

Lidar com isso não é tão simples; a única maneira que eu poderia pensar é usando psqlvariáveis ​​como esta:

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

Não sei por que você precisa do bash, isso deve funcionar?

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

Eu resolvi usando a resposta de @James Brown acima:

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