Экранирование кавычек внутри текста при сбросе Postgres Sql
допустим, мой стол:
id text
+-----+----------+
123 | foo bar
321 | bar "baz"
есть ли способ избежать этих цитат вокруг " баз " при демпинге?
мой запрос в виде:
SELECT text FROM aTable WHERE ...
и я хотел бы, выход должен быть:
foo bar
bar "baz"
вместо:
foo bar
bar baz
2 ответов
вы, вероятно, хотите использовать replace
:
SELECT REPLACE(text, '"', E'\"') FROM aTable WHERE ...
вам нужно будет избежать вашего escape-символа, чтобы получить буквальную обратную косую черту (следовательно, удвоенную обратную косую черту) и использовать префикс" E " в строке замены, чтобы получить право escape синтаксис.
обновление: и благодаря обычной строгости a_horse_with_no_name (хорошая вещь кстати), у нас есть решение, которое не требует дополнительной обратной косой черты или нестандартного " E" приставка:
set standard_conforming_strings = on;
SELECT REPLACE(text, '"', '\"') FROM aTable WHERE ...
на standard_conforming_strings
опция сообщает PostgreSQL использовать стандартный синтаксис для строк SQL:
Это управляет ли обычные строковые литералы ('...') обработать символы буквально, как указано в стандарте SQL.
Это также повлияет на ваш \x5C
побег:
если параметр конфигурации standard_conforming_strings выключен, то PostgreSQL распознает обратную косую черту escapes как в регулярных, так и в escape-строковых константах. Это для обратной совместимости с историческим поведением,где всегда распознавались обратные косые черты.
вы можете использовать следующую инкарнацию :
COPY (SELECT * FROM table) TO ... WITH FORMAT 'CSV', ESCAPE '<WHATEVER ESCAPE CHARACTER YOU WANT>'
as описано здесь.
возможно, Вам не придется ничего делать, как в некоторых случаях ваш QUOTE
опция будет удвоена автоматически. Обратитесь к примерам ссылки. Вы также можете использовать VALUES
кроме SELECT
. Никаких дальнейших искажений данных не требуется.
Это предполагая, что вы используете 7.3 или выше. Синтаксис немного разных между 7.3 и 9.0, поэтому, пожалуйста, обратитесь к соответствующим документам.