Я пытаюсь загрузить 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 верны и соответствуют вашей таблице?