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


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.