Значение hstore с одинарной кавычкой

Я задавал подобный вопрос здесь для: hstore value with space. И получить решение от пользователя: Clodoaldo Neto. Теперь я наткнулся на следующий случай со строкой, содержащей одинарные кавычки.

SELECT 'k=>"name", v=>"St. Xavier's Academy"'::hstore;

Я попробовал это, используя строковую константу в кавычках, прочитав http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html

SELECT 'k=>"name", v=>$$St. Xavier's Academy$$'::hstore;

Но я не мог понять это правильно.

Как сделать postgresql hstore, используя строки, содержащие одинарные кавычки? Похоже, что для этого запроса возможны и другие исключения. Как решить их все сразу?

1 ответ

Вы можете избежать встроенной одинарной кавычки так же, как и любую другую одинарную кавычку внутри строкового литерала: удвоить его.

SELECT 'k=>"name", v=>"St. Xavier''s Academy"'::hstore;
-- ------------------------------^^

В качестве альтернативы, вы можете указать в долларах всю строку:

SELECT $$k=>"name", v=>"St. Xavier's Academy"$$::hstore;

Независимо от того, какой интерфейс вы используете для общения с PostgreSQL, вы должны заботиться об этих кавычках и избегать проблем. Если вы используете ручную сортировку строк для построения SQL-кода, вам следует использовать методы цитирования и заполнителя вашего драйвера.


Внутренний анализ hstore понимает двойные кавычки вокруг ключей:

Ключи и значения в двойных кавычках, включая пробелы, запятые, =s или>s.

Как вы заметили, долларовые кавычки предназначены для строковых литералов SQL, парсер hstore не знает, что они означают.

Другие вопросы по тегам