Экранирование кавычек внутри текста при сбросе 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, поэтому, пожалуйста, обратитесь к соответствующим документам.