Cómo formatear comillas en una consulta de PostgreSQL desde un script bash

Oct 27 2020

Estoy tratando de consultar un pod de kubernetes Postgres usando un script bash donde quiero permitir que el usuario ingrese una variable y luego use esa variable para consultar. Mi script de bash es el siguiente:

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

He probado todas las combinaciones de comillas simples y dobles, pero no puedo pasar un nombre de usuario de tipo cadena. cualquier sugerencia sera apreciada

Respuestas

1 LaurenzAlbe Oct 27 2020 at 14:44

La solución simple, pero mala, es

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

Esto hace que las citas sean correctas, pero es vulnerable a la inyección de SQL. ¿Qué pasa si la variable tcontiene un valor con comillas simples?

Lidiar con eso no es tan simple; la única forma en que puedo pensar es usar psqlvariables 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

No estoy seguro de por qué necesita bash, ¿debería funcionar?

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

Lo resolví usando la respuesta de @James Brown anterior:

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