Экранирование кавычек внутри текста при выгрузке Postgres Sql - PullRequest
7 голосов
/ 26 апреля 2011

Допустим, мой стол:

  id    text
+-----+----------+
  123 | foo bar
  321 | bar "baz"

Есть ли способ избежать этих кавычек вокруг 'baz' при сбросе?

Мой запрос в форме:

SELECT text FROM aTable WHERE ...

И я хотел бы, чтобы результат был:

foo bar
bar \"baz\"

вместо:

foo bar
bar baz

Ответы [ 2 ]

7 голосов
/ 26 апреля 2011

Возможно, вы захотите использовать replace:

SELECT REPLACE(text, '"', E'\\"') FROM aTable WHERE ...

Вам нужно будет экранировать свой escape-символ, чтобы получить буквальный обратный слеш (отсюда удвоенный обратный слеш) и использоватьПрефикс «E» в строке замены для получения правильного escape-синтаксиса .

UPDATE : И благодаря обычной строгости a_horse_with_no_name (что хорошо, кстати, у нас)решение, которое не требует дополнительного обратного слеша или нестандартного префикса «E»:

set standard_conforming_strings = on;
SELECT REPLACE(text, '"', '\"') FROM aTable WHERE ...

Опция standard_conforming_strings указывает PostgreSQL использовать стандартный синтаксис для строк SQL:

Этот параметр определяет, будут ли обычные строковые литералы ('...') обрабатывать обратную косую черту буквально, как указано в стандарте SQL.

Это также повлияет на ваш \x5C escape :

Если параметр конфигурации standard_conforming_strings выключен, то PostgreSQL распознает экранирование обратной косой черты как в обычной, так и в константе escape-строки.Это для обратной совместимости с историческим поведением, где всегда были распознаны обратные слэши.

1 голос
/ 26 апреля 2011

Вы можете использовать следующее воплощение команды COPY:

COPY (SELECT * FROM table) TO ... WITH FORMAT 'CSV', ESCAPE '<WHATEVER ESCAPE CHARACTER YOU WANT>'

как описано здесь .

Возможно, вам не придется ничего делать, поскольку в некоторых случаях ваш параметр QUOTE будет автоматически удваиваться. Пожалуйста, ознакомьтесь с примерами для ссылки. Вы также можете использовать VALUES в дополнение к SELECT. Дальнейшее искажение данных не требуется.

Предполагается, что вы используете 7.3 или выше. Синтаксис немного отличается от 7,3 до 9,0, поэтому, пожалуйста, обратитесь к соответствующей документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...