COPY CSV-файл со столбцом идентификатора - PullRequest
1 голос
/ 14 марта 2011

У меня есть приложение rails, и я пытаюсь загрузить в него данные с помощью команды COPY PostgreSQL. Файл CSV. Таблица сопоставляется с моделью Rails, и мне нужно сохранить столбец идентификатора первичного ключа, чтобы я мог использовать model.for_each для игры с данными - в таблице будет 5M + строк.

У меня вопрос: как мне структурировать CSV, чтобы я мог загружать данные в таблицу и по-прежнему разрешать там находиться столбец ID? Это облом, потому что единственная причина, в которой я нуждаюсь, это метод for_each.

Несмотря на это, я попытался отправить NULL, как в:

NULL,col1,col2,col3,col4, etc.

Но это не работает.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 15 марта 2011

Передача нулевого значения для первичного ключа никогда не будет работать независимо от того, какие параметры вы установили для нулевой строки.Вы бы сказали бэкэнду установить первичный ключ в null, который он никогда не допустит, какой бы ни была команда для вставки.

Я действительно понятия не имею, что вы имеете в виду, сохраняя первичный ключ.Это то, что будет сохранено независимо от того, что делать.Если вы хотите, чтобы БД выбрала для вас значение, а первичный ключ - это последовательный (автоинкремент), то явно укажите все столбцы, кроме первичного:

COPY country (colA, colB, colC) FROM '/usr1/proj/bray/sql/country_data'; -- leave out pkey

Это также может быть быстрее читатьдокументация о том, какие параметры нулевой строки вы хотите использовать вместо угадывания возможных значений:

http://www.postgresql.org/docs/9.0/static/sql-copy.html

1 голос
/ 15 марта 2011

По умолчанию при использовании WITH CSV используется пустая строка без кавычек, например:

,col1,col2,col3,,col5

, которая создает запись, которая выглядит следующим образом:

NULL,'col1','col2','col3',NULL,'col5'
...