Значение 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 не знает, что они означают.