PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Sisipkan teks dengan tanda kutip tunggal di PostgreSQL

Literal string

Melarikan diri dari tanda kutip tunggal ' dengan menggandakannya -> '' adalah cara standar dan bekerja tentu saja:

'user's log'     -- incorrect syntax (unbalanced quote)
'user''s log'

Kutipan tunggal biasa (kode ASCII / UTF-8 39), ingatlah, bukan backtick ` , yang tidak memiliki tujuan khusus di Postgres (tidak seperti RDBMS tertentu lainnya) dan bukan tanda kutip ganda " , digunakan untuk pengidentifikasi.

Dalam versi lama atau jika Anda masih menjalankan dengan standard_conforming_strings = off atau, umumnya, jika Anda menambahkan string Anda dengan E untuk mendeklarasikan Sintaks string escape Posix , Anda juga dapat melarikan diri dengan garis miring terbalik \ :

E'user\'s log'

Backslash sendiri diloloskan dengan backslash lain. Tapi itu umumnya tidak lebih baik.
Jika Anda harus berurusan dengan banyak tanda kutip tunggal atau beberapa lapisan melarikan diri, Anda dapat menghindari mengutip neraka di PostgreSQL dengan string yang dikutip dolar :

'escape '' with '''''
$$escape ' with ''$$

Untuk lebih menghindari kebingungan di antara kutipan dolar, tambahkan token unik ke setiap pasangan:

$token$escape ' with ''$token$

Yang dapat disarangkan sejumlah level:

$token2$Inner string: $token1$escape ' with ''$token1$ is nested$token2$

Perhatikan jika $ karakter harus memiliki arti khusus dalam perangkat lunak klien Anda. Anda mungkin harus menghindarinya sebagai tambahan. Ini tidak terjadi pada klien PostgreSQL standar seperti psql atau pgAdmin.

Itu semua sangat berguna untuk menulis fungsi plpgsql atau perintah SQL ad-hoc. Itu tidak dapat mengurangi kebutuhan untuk menggunakan pernyataan yang disiapkan atau beberapa metode lain untuk melindungi terhadap injeksi SQL di aplikasi Anda ketika input pengguna dimungkinkan. @ Jawaban Craig memiliki lebih banyak tentang itu. Selengkapnya:

  • Injeksi SQL dalam fungsi Postgres vs kueri yang disiapkan

Nilai di dalam Postgres

Saat berurusan dengan nilai di dalam database, ada beberapa fungsi yang berguna untuk mengutip string dengan benar:

  • quote_literal() atau quote_nullable() - yang terakhir menampilkan string NULL untuk masukan nol. (Ada juga quote_ident() untuk mengutip dua kali string jika diperlukan untuk mendapatkan pengidentifikasi SQL yang valid .)
  • format() dengan penentu format %L setara dengan quote_nullable() .
    Seperti:format('%L', string_var)
  • concat() atau concat_ws() biasanya tidak baik untuk tujuan ini seperti yang tidak menghindari tanda kutip tunggal dan garis miring terbalik.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa akses array PostgreSQL jauh lebih cepat di C daripada di PL/pgSQL?

  2. Masalah pemulihan basis data Heroku

  3. CTE dan Paradoks Ulang Tahun

  4. Kiat untuk Menyimpan Cadangan PostgreSQL di Amazon AWS

  5. Kendala unik pada kombinasi dua kolom?