PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chèn văn bản với dấu ngoặc kép trong PostgreSQL

Chuỗi ký tự

Thoát khỏi dấu ngoặc kép ' bằng cách nhân đôi chúng lên -> '' là cách tiêu chuẩn và tất nhiên là hoạt động:

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

Dấu ngoặc kép đơn thuần (ASCII / UTF-8 mã 39), lưu ý bạn, không phải dấu ngoặc kép ` , không có mục đích đặc biệt trong Postgres (không giống như một số RDBMS khác) và không phải là dấu ngoặc kép " , được sử dụng cho số nhận dạng.

Trong các phiên bản cũ hoặc nếu bạn vẫn chạy với standard_conforming_strings = off hoặc nói chung, nếu bạn thêm vào trước chuỗi của mình bằng E để khai báo Cú pháp chuỗi thoát Posix , bạn cũng có thể thoát bằng dấu gạch chéo ngược \ :

E'user\'s log'

Dấu gạch chéo ngược chính nó được thoát bằng một dấu gạch chéo ngược khác. Nhưng điều đó nói chung là không thích hợp.
Nếu bạn phải xử lý nhiều dấu ngoặc kép hoặc nhiều lớp thoát, bạn có thể tránh trích dẫn địa ngục trong PostgreSQL bằng chuỗi được trích dẫn bằng đô la :

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

Để tránh nhầm lẫn giữa các dấu ngoặc kép, hãy thêm một mã thông báo duy nhất vào mỗi cặp:

$token$escape ' with ''$token$

Có thể được lồng vào bất kỳ số cấp nào:

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

Hãy chú ý nếu $ ký tự phải có ý nghĩa đặc biệt trong phần mềm máy khách của bạn. Ngoài ra, bạn có thể phải thoát khỏi nó. Đây không phải là trường hợp của các ứng dụng khách PostgreSQL tiêu chuẩn như psql hoặc pgAdmin.

Điều đó rất hữu ích cho việc viết các hàm plpgsql hoặc các lệnh SQL đặc biệt. Tuy nhiên, nó không thể giảm bớt nhu cầu sử dụng các câu lệnh đã chuẩn bị sẵn hoặc một số phương pháp khác để bảo vệ chống lại việc đưa SQL vào ứng dụng của bạn khi có thể có người dùng nhập. @ Craig của câu trả lời có nhiều hơn về điều đó. Thêm chi tiết:

  • Chèn SQL vào các hàm Postgres so với các truy vấn đã chuẩn bị trước

Giá trị bên trong Postgres

Khi xử lý các giá trị bên trong cơ sở dữ liệu, có một số chức năng hữu ích để trích dẫn các chuỗi một cách chính xác:

  • quote_literal() hoặc quote_nullable() - phần sau xuất ra chuỗi NULL cho đầu vào null. (Ngoài ra còn có quote_ident() thành dấu ngoặc kép các chuỗi khi cần thiết để nhận được số nhận dạng hợp lệ của SQL .)
  • format() với mã định dạng %L tương đương với quote_nullable() .
    Như:format('%L', string_var)
  • concat() hoặc concat_ws() thường không tốt cho mục đích này vì những mục đích đó không thoát khỏi dấu ngoặc kép và dấu gạch chéo ngược lồng nhau.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tham gia truy vấn đếm trên create_series () và truy xuất giá trị Null là '0'

  2. Cách bật TimescaleDB trên cơ sở dữ liệu PostgreSQL hiện có

  3. Làm cách nào để thêm nguồn dữ liệu PostgreSQL vào WildFly 9.0?

  4. Python / postgres / psycopg2:nhận ID của hàng vừa được chèn

  5. Tại sao PostgreSQL không thích tên bảng UPPERCASE?