Ver Mensaje Individual
  #14 (permalink)  
Antiguo 21/04/2015, 08:48
AJDC
 
Fecha de Ingreso: agosto-2003
Mensajes: 324
Antigüedad: 20 años, 8 meses
Puntos: 1
Respuesta: Duplicar base de datos Postgres desde código php

Bueno .... por ahora he encontrado una primera solución que intentaré depurar, perfeccionar, o por qué no ... usar otra opción.
Lo dejo por si a alguien le viene bien:

Lo importante, es que no debe ser una bd en "producción". Para eso, tengo n bd a modo de plantilla...

Código PHP:
$host 'localhost';
$user 'postgres';
$pass 'tuclave';
$db 'master';

$new_db 'nombrenuevabd';

//Conectamos al servidor
$conexioninicio pg_pconnect'host='$host .' dbname=\'\' user='$user .' password='$pass )
or die(
'Error al conectar a la base de datos:</br>'
    
'</br>MENSAJE: ' error_get_last()[message]
    . 
'</br>TIPO: ' error_get_last()[type]
    . 
'</br>FICHERO: ' error_get_last()[file]
    . 
'</br>LINEA: ' error_get_last()[line]
);

//Cerramos todas las conexiones que hubiera a la BD maestra (este punto hay que mejorarlo)
pg_query$conexioninicio ,'SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname =\'' $db '\'');

//Conecto con la bd maestra
$conexionorigenpg_pconnect'host='$host .' dbname='$db .' user='$user .' password='$pass )
or die(
'Error al conectar a la base de datos:</br>'
    
'</br>MENSAJE: ' error_get_last()[message]
    . 
'</br>TIPO: ' error_get_last()[type]
    . 
'</br>FICHERO: ' error_get_last()[file]
    . 
'</br>LINEA: ' error_get_last()[line]
);

// Duplico la BD basándome en la maestra a modo de plantilla
$result pg_query$conexionorigen ,'CREATE DATABASE ' $new_db ' WITH TEMPLATE ' $db ' ENCODING=\'UTF8\' OWNER ' $user);
if (!
$result) {
//Imprimo posible error
    
echo ('<br>');
    echo (
'<br>');
    echo 
"An error occurred.\n";
    echo (
'<br>');
    echo 
pg_last_error($conexionorigen);
    echo (
'<br>');
    
$result_status pg_result_status($result);
    
$mysqli_errno_equivalent pg_result_error_field($result_statusPGSQL_DIAG_SQLSTATE);
    echo (
$mysqli_errno_equivalent);
    
pg_close($conexionorigen);
    exit;
} else {
//Imprimo que todo fue bien
    
echo "ok.\n";
    
pg_close($conexionorigen);
    exit;
}


?>