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
$conexionorigen= pg_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_status, PGSQL_DIAG_SQLSTATE);
echo ($mysqli_errno_equivalent);
pg_close($conexionorigen);
exit;
} else {
//Imprimo que todo fue bien
echo "ok.\n";
pg_close($conexionorigen);
exit;
}
?>