PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Вмъкване на текст с единични кавички в PostgreSQL

Стрингови литерали

Екраниране на единични кавички ' като ги удвоите -> '' е стандартният начин и работи разбира се:

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

Обикновени единични кавички (ASCII / UTF-8 код 39), имайте предвид, а не обратно ` , които нямат специално предназначение в Postgres (за разлика от някои други RDBMS) и нямат двойни кавички " , използвани за идентификатори.

В стари версии или ако все още работите с standard_conforming_strings = off или като цяло, ако добавите пред низа си с E за да декларирате синтаксис на избягващ низ на Posix , можете също да избягате с обратната наклонена черта \ :

E'user\'s log'

Самата обратна наклонена черта се екранира с друга обратна наклонена черта. Но това обикновено не е за предпочитане.
Ако трябва да се справите с много единични кавички или множество слоеве на екраниране, можете да избегнете цитирането на ада в PostgreSQL с низове с кавички в долари :

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

За да избегнете допълнително объркване сред доларовите котировки, добавете уникален токен към всяка двойка:

$token$escape ' with ''$token$

Което може да бъде вложено произволен брой нива:

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

Обърнете внимание дали $ символът трябва да има специално значение във вашия клиентски софтуер. Може да се наложи да го избягате допълнително. Това не е така със стандартните PostgreSQL клиенти като psql или pgAdmin.

Всичко това е много полезно за писане на plpgsql функции или ad-hoc SQL команди. Въпреки това не може да облекчи необходимостта от използване на подготвени оператори или някакъв друг метод за защита срещу SQL инжектиране във вашето приложение, когато въвеждането от потребителя е възможно. Отговорът на @Craig има повече за това. Повече подробности:

  • SQL инжекция във функциите на Postgres срещу подготвени заявки

Стойности в Postgres

Когато работите със стойности в базата данни, има няколко полезни функции за правилно цитиране на низове:

  • quote_literal() или quote_nullable() - последният извежда низа NULL за нулев вход. (Има също quote_ident() до двойни кавички низове, където са необходими за получаване на валидни SQL идентификатори .)
  • format() с спецификатора на формата %L е еквивалентен на quote_nullable() .
    Като:format('%L', string_var)
  • concat() или concat_ws() обикновено не са подходящи за тази цел, тъй като те не избягване на вложени единични кавички и обратна наклонена черта.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. съединете две различни таблици и премахнете дублирани записи

  2. Върнете се към readline версия 6.x в Homebrew, за да коригирате Postgresql?

  3. PostgreSQL:използване на изчислена колона в същата заявка

  4. Вмъкване на няколко реда в една таблица въз основа на число в друга таблица

  5. Автоматично отказване на базата данни Moodle PostgreSQL