Вопрос

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

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

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

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

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

Спасибо.

Это было полезно?

Решение

Передача в NULL для первичного ключа никогда не будет работать независимо от того, какие варианты вы установили для нулевой строки. Вы бы сказали бэкэнд, чтобы установить первичный ключ на 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

Другие советы

По умолчанию при использовании с помощью CSV является невозможной пустой строкой, например:

,col1,col2,col3,,col5

Что создаст запись, которая выглядит как:

NULL,'col1','col2','col3',NULL,'col5'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top