Как указать вкладку в интерфейсе 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')

user4372693
источник
1
разделителем по умолчанию для текстового файла является табуляция .. Я использовал это, и он работает .. postgresql.org/docs/9.2/static/sql-copy.html
user4372693 08
1
Это помогает, когда вы хотите поместить команду в сценарий оболочки - $$\t$$как ни странно, похоже, не работает.
Otheus
Это работает для данных, созданных pg_dumpбез указания других параметров.
GuiRitter