У меня есть база данных PostgreSQL, и мне нужно запросить таблицу, которая содержит 20 миллионов строк. Затем я выдвигаю результат в CSV, а затем, наконец, в S3. Я собрал сценарий PHP для достижения этого. Когда я ограничиваю свой запрос 6 миллионами строк, он удастся, но все выше, что в значительной степени, кажется, просто терпит неудачу. Сообщения об ошибках зарегистрированы или отображаются даже со всеми проверками ошибок и включены параметры. Также увеличила память в моем экземпляре Centos до 3 ГБ и действительно не повезло. Мой код следует: < /p>
//connect to database
$myPDO = new PDO('pgsql:host=127.0.0.1;port=5433;dbname=test', 'test', 'test');
$myPDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
//time and memory usage variables
error_reporting(-1);
$time = microtime(TRUE);
$mem = memory_get_usage();
$stmt = $myPDO->prepare("SELECT * FROM table");
$stmt->execute();
$u = "export.csv";
$h = fopen($u, "w+");
$first = true;
//counter
$counter = 0;
//loop through all rows
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$counter++;
//export column header
if ($first) {
fputcsv($h, array_keys($row));
$first = false;
}
//export content
fputcsv($h, $row);
}
fclose($h);
require('AwsS3Upload.php');
//pdo error output
if (!$stmt) {
echo "\nPDO::errorInfo():\n";
print_r($dbh->errorInfo());
}
print_r(array('memory' => (memory_get_usage() - $mem) / (1024 * 1024), 'seconds' => microtime(TRUE) - $time));
< /code>
Обновление - Рабочий код: < /p>
$myPDO = new PDO('pgsql:host=127.0.0.1;port=5433;dbname=test', 'test', 'test');
$myPDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$myPDO->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$myPDO->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
//time and memory usage variables
error_reporting(-1);
$time = microtime(TRUE);
$mem = memory_get_usage();
for($i=0; $iprepare($sql);
$stmt->bindParam(':order', $order, PDO::PARAM_INT);
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$u = "$i-export.csv";
$h = fopen($u, "w+");
$first = true;
//counter
$counter = 0;
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$counter++;
if ($first) {
fputcsv($h, array_keys($row));
$first = false;
}
fputcsv($h, $row);
}
fclose($h);
require('AwsS3Upload.php');
}
Подробнее здесь: https://stackoverflow.com/questions/596 ... of-records
PHP PDO SELECT Запрос, сбой в большом объеме записей [дублировать] ⇐ Php
Кемеровские программисты php общаются здесь
-
Anonymous
1739950373
Anonymous
У меня есть база данных PostgreSQL, и мне нужно запросить таблицу, которая содержит 20 миллионов строк. Затем я выдвигаю результат в CSV, а затем, наконец, в S3. Я собрал сценарий PHP для достижения этого. Когда я ограничиваю свой запрос 6 миллионами строк, он удастся, но все выше, что в значительной степени, кажется, просто терпит неудачу. Сообщения об ошибках зарегистрированы или отображаются даже со всеми проверками ошибок и включены параметры. Также увеличила память в моем экземпляре Centos до 3 ГБ и действительно не повезло. Мой код следует: < /p>
//connect to database
$myPDO = new PDO('pgsql:host=127.0.0.1;port=5433;dbname=test', 'test', 'test');
$myPDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
//time and memory usage variables
error_reporting(-1);
$time = microtime(TRUE);
$mem = memory_get_usage();
$stmt = $myPDO->prepare("SELECT * FROM table");
$stmt->execute();
$u = "export.csv";
$h = fopen($u, "w+");
$first = true;
//counter
$counter = 0;
//loop through all rows
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$counter++;
//export column header
if ($first) {
fputcsv($h, array_keys($row));
$first = false;
}
//export content
fputcsv($h, $row);
}
fclose($h);
require('AwsS3Upload.php');
//pdo error output
if (!$stmt) {
echo "\nPDO::errorInfo():\n";
print_r($dbh->errorInfo());
}
print_r(array('memory' => (memory_get_usage() - $mem) / (1024 * 1024), 'seconds' => microtime(TRUE) - $time));
< /code>
Обновление - Рабочий код: < /p>
$myPDO = new PDO('pgsql:host=127.0.0.1;port=5433;dbname=test', 'test', 'test');
$myPDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$myPDO->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$myPDO->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
//time and memory usage variables
error_reporting(-1);
$time = microtime(TRUE);
$mem = memory_get_usage();
for($i=0; $iprepare($sql);
$stmt->bindParam(':order', $order, PDO::PARAM_INT);
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$u = "$i-export.csv";
$h = fopen($u, "w+");
$first = true;
//counter
$counter = 0;
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$counter++;
if ($first) {
fputcsv($h, array_keys($row));
$first = false;
}
fputcsv($h, $row);
}
fclose($h);
require('AwsS3Upload.php');
}
Подробнее здесь: [url]https://stackoverflow.com/questions/59695406/php-pdo-select-query-failing-on-large-amount-of-records[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия