Как указать вкладку в интерфейсе postgres COPY


84

Я хотел бы использовать команду 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 начинает escape-последовательность. Думайте о 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 08

1
Это помогает, когда вы хотите поместить команду в сценарий оболочки - $$\t$$как ни странно, похоже, не работает.
Otheus

Это работает для данных, созданных pg_dumpбез указания других параметров.
GuiRitter
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.