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

Я хотел бы использовать команду 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" неверно?


person Chris Curvey    schedule 24.05.2011    source источник
comment
Попробуйте, что предлагает сообщение об ошибке: \copy cm_state from 'state.data' with delimiter E'\t' null as ';'   -  person Frank Farmer    schedule 24.05.2011
comment
E начинает escape-последовательность. Думайте о E так же, как о строке в двойных кавычках в C. E '\ t' == \ t.   -  person Sean    schedule 24.05.2011


Ответы (2)


Используйте E'\t', чтобы сообщить postgresql, что там могут быть экранированные символы:

\copy cm_state from 'state.data' with delimiter E'\t' null as ';'
person Seth Robertson    schedule 24.05.2011
comment
Спасибо! Это также решило для меня менее информативную ошибку COPY delimiter must be a single one-byte character. Добавьте его сюда, чтобы поисковые системы могли его уловить. - person Denis Drescher; 26.11.2015
comment
Это должен быть еще один ответ с сообщением об ошибке. Просто чтобы поисковики подхватили :) - person RK Kuppala; 07.04.2016

ты можешь сделать это copy cm_state from stdin with (format 'text')

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