|
|
|
|
#!/usr/bin/php -q
|
|
|
|
|
<?php
|
|
|
|
|
//error_reporting(E_ERROR);
|
|
|
|
|
//ini_set('display_errors', "Off");
|
|
|
|
|
include("util/util.php");
|
|
|
|
|
define("MOVE_SUFIXO_TABLE", "__BK__");
|
|
|
|
|
define("MOVE_MAX_ERROS", 5);
|
|
|
|
|
define("MOVE_NUM_REGISTROS", 500);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Informe a tabela a ser movida na linha de comando, para mais de uma tabela informe separadas por ";".
|
|
|
|
|
*/
|
|
|
|
|
$tables = isset($argv[1]) ? trim($argv[1]) : '';
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Arquivo de log.
|
|
|
|
|
*/
|
|
|
|
|
$pathLog = GetFilePath($argv[0]) . "move-table.log";
|
|
|
|
|
try {
|
|
|
|
|
if (!$tables) {
|
|
|
|
|
GeraExcept("Informe a tabela a ser movida!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$connStr = '';
|
|
|
|
|
$connStr = !$connStr ? GetDefStrDb() : $connStr;
|
|
|
|
|
$conn = pg_connect($connStr);
|
|
|
|
|
if (!$conn) {
|
|
|
|
|
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel estabelecer uma conex<EFBFBD>o com o banco de dados!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$erros = 0;
|
|
|
|
|
$movido = 0;
|
|
|
|
|
$lineErro = '';
|
|
|
|
|
/*
|
|
|
|
|
* Cria array com as tabelas a serem movidas.
|
|
|
|
|
*/
|
|
|
|
|
$tables = explode(';', $tables);
|
|
|
|
|
|
|
|
|
|
foreach ($tables as $table) {
|
|
|
|
|
/*
|
|
|
|
|
* Tabela destino.
|
|
|
|
|
*/
|
|
|
|
|
$mvTable = sprintf("%s%s", $table, MOVE_SUFIXO_TABLE);
|
|
|
|
|
$lineErro = '';
|
|
|
|
|
try {
|
|
|
|
|
if (!$table)
|
|
|
|
|
break;
|
|
|
|
|
/*
|
|
|
|
|
* Apaga a tabela destino caso exista.
|
|
|
|
|
*/
|
|
|
|
|
if (!pg_query(sprintf("drop table if exists %s", $mvTable))) {
|
|
|
|
|
GeraExcept(sprintf("N<EFBFBD>o foi possivel apagar a tabela %s!", $mvTable));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Cria a tabela destino.
|
|
|
|
|
*/
|
|
|
|
|
if (!pg_query(sprintf("select * into %s from %s where 1=2", $mvTable, $table))) {
|
|
|
|
|
GeraExcept(sprintf("N<EFBFBD>o foi possivel criar a tabela %s!", $mvTable));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Recupera o numero de registros da tabela a ser movida.
|
|
|
|
|
*/
|
|
|
|
|
if (!$result = pg_query(sprintf("select count(*) from %s where ", $table))) {
|
|
|
|
|
GeraExcept(sprintf("N<EFBFBD>o foi possivel recuperar o numero de registros da tabela %s!", $table));
|
|
|
|
|
}
|
|
|
|
|
$row = pg_fetch_row($result);
|
|
|
|
|
$registros = $row[0];
|
|
|
|
|
|
|
|
|
|
$numCiclos = (int) ($registros / MOVE_NUM_REGISTROS) + (($registros % MOVE_NUM_REGISTROS) ? 1 : 0);
|
|
|
|
|
$movido = 0;
|
|
|
|
|
for ($i = 0; $i < $numCiclos; $i++) {
|
|
|
|
|
$query = sprintf("insert into %s select * from %s where limit %s offset %s", $mvTable, $table, MOVE_NUM_REGISTROS, ($i * MOVE_NUM_REGISTROS));
|
|
|
|
|
if (!pg_query($query)) {
|
|
|
|
|
echo (sprintf("N<EFBFBD>o foi possivel inserir os registros de %s a %s da tabela %s!", $movido, ($i * MOVE_NUM_REGISTROS), $mvTable));
|
|
|
|
|
}
|
|
|
|
|
$movido = ($i * MOVE_NUM_REGISTROS);
|
|
|
|
|
|
|
|
|
|
echo sprintf("Movendo de: %s a %s da tabela %s!\n", ($i * MOVE_NUM_REGISTROS), $registros, $table);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
echo sprintf("Tabela %s movida!\n\n", $table);
|
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
|
echo sprintf("%s\n", $ex->getMessage());
|
|
|
|
|
if (++$erros == MOVE_MAX_ERROS) {
|
|
|
|
|
echo sprintf("A %s n<EFBFBD>o pode ser movida\n", $table);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
echo sprintf("Exportacao finalizada!\n\n");
|
|
|
|
|
exit(0);
|
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
|
echo sprintf("%s\n", $ex->getMessage());
|
|
|
|
|
}
|
|
|
|
|
?>
|