Назад | Перейти на главную страницу

Загрузка большого CSV в Postgres

Я пытаюсь загрузить CSV около 100 миллионов записей (около 8 ГБ на диске) в Postgres через копировать команда: copy mytable from 'path/to/myfile.csv' with CSV; Я отслеживал прогресс, проверяя размер таблицы в pgAdmin и сравнивая его с размером CSV. Я знаю, что это будет в лучшем случае расплывчатое сравнение, и мне бы хотелось услышать, есть ли лучший способ отслеживать прогресс.

Вот в чем проблема: эта загрузка продолжается довольно долго (я думаю, слишком долго), и, поскольку я продолжаю проверять размер таблицы, загрузка, похоже, замедляется. То есть теперь загрузка новых 100 МБ данных занимает гораздо больше времени, чем это было раньше при загрузке. Зачем?

Есть ли какие-либо настройки, конфигурации или альтернативный подход, который я могу использовать для более быстрой загрузки, кроме разделения моего CSV на множество файлов меньшего размера?


Обновление: особенности схемы / данных

Одна репрезентативная строка данных:

1234567890,FOOBARF,2010-01-15 03:07:05,0.924700,0.925000

Полное определение схемы:

CREATE TABLE mytable
(
  id integer NOT NULL,
  rname character varying(7) NOT NULL,
  ts timestamp without time zone NOT NULL,
  stat1 numeric NOT NULL,
  stat2 numeric NOT NULL,
  CONSTRAINT pk_id PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE mytable OWNER TO postgres;

Возможно, вам повезет больше, если вы сможете отключить индексы. Но это не лучший ответ, поскольку вы не предоставили достаточно информации о таблице.

Пожалуйста, разместите определение таблицы, ограничения, индексы !!! и триггеры.

Кроме того, вы [убедитесь], что данные CSV верны и соответствуют вашей таблице?