У меня возникают проблемы при импорте данных с использованием .csv в PostgreSQL (больше 50K строк в CSV) - PullRequest
0 голосов
/ 19 декабря 2018

ОШИБКА Я получаю:

Эта страница не работает. Не отправлено никаких данных.ERR_EMPTY_RESPONSE

Я использую язык PHP для чтения файла CSV.

Мой подход PHP похож на обработку данных CSV:

$csvAsArray = array_map('str_getcsv', file($tmpName));

Яубедитесь, что приведенный выше код создает проблему после слов, код не выполняется.Как я могу импортировать больше, чем, по крайней мере, 1 миллион данных одновременно?Кто-нибудь может мне помочь, какой подход я должен выбрать?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Я бы предложил использовать пакет league / csv для анализа и импорта CSV.@ paulsm4 правильно, что никогда не нужно помещать весь файл в память и затем работать с ним, лучше читать построчно.Но этот пакет в хорошем состоянии и делает все это под капотом и довольно эффективно.И это намного более гибко, чем COPY команда postgres, на мой взгляд.Можно фильтровать содержимое, сопоставлять обратные вызовы с полями / строками и все это на стороне PHP.

0 голосов
/ 19 декабря 2018

Похоже, вы пытаетесь захватить все содержимое файла одним глотком.Не делайте этого :) PHP array_map () не масштабируется до 1000-х ... или миллионов строк.

ПРЕДЛОЖЕНИЕ:

  1. Считайте ваши данные во временный файл (как вы, кажется, делаете сейчас).

  2. Сделайте Postgresql COPY

ПРИМЕР:

COPY my_table(my_columns, ...) 
FROM 'my_file.csv' DELIMITER ',' CSV HEADER;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...