PHP PDO SELECT Запрос, сбой в большом объеме записей [дублировать]Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 PHP PDO SELECT Запрос, сбой в большом объеме записей [дублировать]

Сообщение 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');
}


Подробнее здесь: https://stackoverflow.com/questions/596 ... of-records
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»