Як вказати вкладку в постгресовому інтерфейсі КОПІЮВАННЯ


83

Я хотів би використовувати команду psql "\ copy" для витягування даних із файлу, розділеного табуляцією, у Postgres. Я використовую цю команду:

\copy cm_state from 'state.data' with delimiter '\t' null as ;

Але я отримую це попередження (таблиця насправді завантажується нормально):

WARNING:  nonstandard use of escape in a string literal
LINE 1: COPY cm_state FROM STDIN DELIMITER '\t' NULL AS ';'
HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.

Як вказати вкладку, якщо '\ t' неправильна?


14
Спробуйте те, що наводить повідомлення про помилку:\copy cm_state from 'state.data' with delimiter E'\t' null as ';'
— Френк Фермер

Так, ти маєш рацію. Я не бачив провідного "Е" у повідомленні про помилку. Дуже дякую!
— Кріс Керві,

2
E починає послідовність втечі. Думайте про E так само, як про рядок із подвійними лапками в C. E '\ t' == "\ t".
— Шон,

Відповіді:


182

Використовуйте, E'\t'щоб повідомити postgresql, що там можуть бути екрановані символи:

\copy cm_state from 'state.data' with delimiter E'\t' null as ;

16
Дякую! Це також вирішило менш інформативну помилку COPY delimiter must be a single one-byte characterдля мене. Додавши його сюди, щоб пошукові системи могли це зрозуміти.
— Денис Дрешер

Це має бути ще одна відповідь із повідомленням про помилку. Тільки для того, щоб пошукові системи підхопили :)
— РК Куппала

5

Ви можете це зробити copy cm_state from stdin with (format 'text')


1
типовим роздільником текстового файлу є вкладка .. Я використав це, і воно працює. postgresql.org/docs/9.2/static/sql-copy.html
— user4372693

1
Це допомагає, коли ви хочете помістити команду в сценарій оболонки - $$\t$$як не дивно, це працює.
— Отей

Це працює для даних, що генеруються pg_dumpбез інших параметрів.
— GuiRitter
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.