pg_dump rendezett adatok

A PostgreSQL dumpot tároljuk az SVN kódban és szükségünk volt egy rendezett formára, ahol mindig ugyanabban a sorrendben vannak a rekordok. Sajnos a pg_dump alapban a rekordokat valami ismeretlen (utolsó módosítás talán) érték alapján rendezi.

A flamelistán még márciusban Mage-től kaptam egy Rubys megoldást, amit átültettem PHP-re:

  1. $stdin = file(‘php://stdin’);
  2. $copy = FALSE;
  3. $arr = array();
  4. foreach ($stdin as $line) {
  5.     if (!$copy) {
  6.         echo $line;
  7.         if (substr($line, 0, 4) == ‘COPY’) {
  8.             $copy = TRUE;
  9.             $arr = array();
  10.         }
  11.     } else {
  12.         if (substr($line, 0, 2) == \.) {
  13.             natsort($arr);
  14.             echo implode(, $arr).$line;
  15.             $copy = FALSE;
  16.         } else {
  17.             $arr[] = $line;
  18.         }
  19.     }
  20. }

A fenti PHP kód használata:

  1. pg_dump database | /usr/bin/php5 sorter.php > dump.sql

Mondd el a véleményedet!