Cara memformat kutipan dalam kueri PostgreSQL dari skrip bash

Oct 27 2020

Saya mencoba untuk mengkueri pod kubernetes Postgres menggunakan skrip bash di mana saya ingin mengizinkan pengguna untuk memasukkan variabel dan kemudian menggunakan variabel itu untuk melakukan kueri. Skrip bash saya adalah sebagai berikut:

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

Saya telah mencoba semua kombinasi tanda kutip tunggal dan ganda tetapi saya tidak dapat memberikan nama pengguna tipe string. Setiap saran akan dihargai

Jawaban

1 LaurenzAlbe Oct 27 2020 at 14:44

Solusinya sederhana, tapi buruk

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

Ini mendapatkan kutipan yang benar, tetapi rentan terhadap injeksi SQL. Bagaimana jika variabel tberisi nilai dengan satu kutipan?

Berurusan dengan itu tidak sesederhana itu; satu-satunya cara yang bisa saya pikirkan adalah menggunakan psqlvariabel seperti ini:

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

Tidak yakin mengapa Anda perlu pesta, haruskah ini berfungsi?

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

saya menyelesaikannya menggunakan jawaban @James Brown di atas:

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