Foros del Web » Programando para Internet » PHP »

Duplicar base de datos Postgres desde código php

Estas en el tema de Duplicar base de datos Postgres desde código php en el foro de PHP en Foros del Web. Hola. Necesito ayuda de cómo puedo hacer una copia de una bd que existe en mi servidor Postgres, cambiándole el nombre lógicamente. Estoy implementando un ...
  #1 (permalink)  
Antiguo 21/04/2015, 05:01
 
Fecha de Ingreso: agosto-2003
Mensajes: 324
Antigüedad: 20 años, 11 meses
Puntos: 1
Duplicar base de datos Postgres desde código php

Hola.
Necesito ayuda de cómo puedo hacer una copia de una bd que existe en mi servidor Postgres, cambiándole el nombre lógicamente.

Estoy implementando un servicio que, en un momento dado, necesita duplicar una bd que ya existe, digamos que es la "BD master", y crear una copia de ella, en el mismo servidor, con mismos permisos, etc...

Todo desde un php que se invoque desde el navegador.....sin usar consola ni pgMyAdmin o parecidos...

¿Alguna sugerencia, ejemplo...?

Muchas gracias.
  #2 (permalink)  
Antiguo 21/04/2015, 07:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 3 meses
Puntos: 2534
Respuesta: Duplicar base de datos Postgres desde código php

¿Podrías consultar una referencia de Postgres?

Vamos, que con PHP sólo ejecutarías la consulta así que la solución no es PHP.

Postgres debe tener algún tipo de instrucción para hacer réplica, tampoco hay que quebrarse la cabeza.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 21/04/2015, 07:17
 
Fecha de Ingreso: agosto-2003
Mensajes: 324
Antigüedad: 20 años, 11 meses
Puntos: 1
Respuesta: Duplicar base de datos Postgres desde código php

Gracias.
Por lo que pero, se puede lógicamente mediante terminal con pg_dump o pg_restore.... pero necesito hacerlo desde una interface en navegador (html y php).

He encontrado algo parecido para MySql, pero no logro hacerlo para Postgres.

Gracias.
  #4 (permalink)  
Antiguo 21/04/2015, 07:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 3 meses
Puntos: 2534
Respuesta: Duplicar base de datos Postgres desde código php

No me has entendido, revisa una referencia de SQL para Postgres, ahí debe existir una instrucción a nivel de SQL para hacer réplica.

Yo jamás te he mencionado programas de la linea de comandos (terminal) ni nada por el estilo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 21/04/2015, 07:21
 
Fecha de Ingreso: agosto-2003
Mensajes: 324
Antigüedad: 20 años, 11 meses
Puntos: 1
Respuesta: Duplicar base de datos Postgres desde código php

Gracias.... me repasaré de nuevo la documentación de Postgres......
Gracias de nuevo
  #6 (permalink)  
Antiguo 21/04/2015, 07:22
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 2 meses
Puntos: 320
Respuesta: Duplicar base de datos Postgres desde código php

Si puedes hacerlo desde terminal y también puedes hacer que php llame a la terminal no hay problema.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #7 (permalink)  
Antiguo 21/04/2015, 07:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 3 meses
Puntos: 2534
Respuesta: Duplicar base de datos Postgres desde código php

Cita:
Iniciado por AJDC Ver Mensaje
Gracias.... me repasaré de nuevo la documentación de Postgres......
Gracias de nuevo
En el peor de los casos solo debes crear la tabla (conociendo su esquema) y hacer una copia así:
Cita:
INSERT INTO copia SELECT * FROM original
Pero igual te toca revisar si es posible con Potsgres.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 21/04/2015, 07:24
 
Fecha de Ingreso: agosto-2003
Mensajes: 324
Antigüedad: 20 años, 11 meses
Puntos: 1
Respuesta: Duplicar base de datos Postgres desde código php

Gracias.... probaré
  #9 (permalink)  
Antiguo 21/04/2015, 07:42
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años
Puntos: 379
Respuesta: Duplicar base de datos Postgres desde código php

Cita:
Estoy implementando un servicio que, en un momento dado, necesita duplicar una bd que ya existe, digamos que es la "BD master", y crear una copia de ella, en el mismo servidor, con mismos permisos, etc...
Esto lo requieres para hacer respaldos ? o cual es la finalidad ?
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #10 (permalink)  
Antiguo 21/04/2015, 07:53
 
Fecha de Ingreso: agosto-2003
Mensajes: 324
Antigüedad: 20 años, 11 meses
Puntos: 1
Respuesta: Duplicar base de datos Postgres desde código php

Me explico..... que creo que no lo hice muy bien antes....
Tengo una aplicación "master" limpia que tiene su funcionalidad, y usa una bd Postgres.
Desde una especie de "administrador" (otra aplicación web), para cada usuario registrado se "duplica" la aplicación master. Todo desde la aplicación con el interface web.
Ya tengo controlado el tema del duplicado de directorios, pero necesito duplicar la bd por cada copia de la master que hagamos.
Por hacer un simil (salvando diferencias), pensad en una aplicación en la "nube" y que por cada cliente que se registre duplicamos dicha aplicación en el mismo server.

Gracias
  #11 (permalink)  
Antiguo 21/04/2015, 08:15
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 2 meses
Puntos: 320
Respuesta: Duplicar base de datos Postgres desde código php

Apalapa, me parece que duplicar directorios y bases de datos no es una manera muy prolija de resolver el problema! seria mucho mejor identificar dentro de una sola base de datos a que cliente corresponde cada cosa, de seguro postgress tiene un buen soporte para cuentas de usuario y permisos, podrias crear un usuario en la base de datos para cada usuario nuevo y hacer que cada usuario solo vea sus registros, es decir, si bien la base de datos es unica y tiene todo, cada usuario solo ve lo que le corresponde, como si la base de datos fuera exclusivamente suya ¿se entiende la idea?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #12 (permalink)  
Antiguo 21/04/2015, 08:21
 
Fecha de Ingreso: agosto-2003
Mensajes: 324
Antigüedad: 20 años, 11 meses
Puntos: 1
Respuesta: Duplicar base de datos Postgres desde código php

Gracias por la respuesta.
De entre las opciones que barajé en su inicio, estaba esa.. pero por distintos motivos, al final, con sus pros y contras, me decanté por la opción que planteo .....
  #13 (permalink)  
Antiguo 21/04/2015, 08:42
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 2 meses
Puntos: 320
Respuesta: Duplicar base de datos Postgres desde código php

Me gustaría saber cuales son esos motivos, porque de entrada se me ocurren no menos de 10 motivos sumamente razonables e importantes por las cuales jamas elegiría lo que mismo que tu.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #14 (permalink)  
Antiguo 21/04/2015, 08:48
 
Fecha de Ingreso: agosto-2003
Mensajes: 324
Antigüedad: 20 años, 11 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;
}


?> 
  #15 (permalink)  
Antiguo 21/04/2015, 08:50
 
Fecha de Ingreso: agosto-2003
Mensajes: 324
Antigüedad: 20 años, 11 meses
Puntos: 1
Respuesta: Duplicar base de datos Postgres desde código php

Te entiendo NSD... principalmente, y repito, aunque se que puede no ser la mejor opción por temas de mantenimiento, escalabilidad, por ejemplo ... (soy consciente de ello), lo decidido porque cada una de esas instancias podrá ser modificada y ampliada por cada uno de los "propietarios" ...

Gracias
  #16 (permalink)  
Antiguo 21/04/2015, 11:40
 
Fecha de Ingreso: enero-2015
Mensajes: 35
Antigüedad: 9 años, 6 meses
Puntos: 1
Respuesta: Duplicar base de datos Postgres desde código php

De acuerdo a los datos que posteaste yo te sugeriría crear un script SQL con todas las sentencias necesarias para la creacion de la base de datos e insert necesarios, y mediante un script php podrías optar entre crear la base de datos mediante linea de comandos mediante pipes (desconosco postgres, en mysql si se puede) o bien abrir el script SQL mediante funciones de bajo nivel e interpretar cada comando mediante ';' que es el separador entre comandos SQL y enviarlo al postgre, te ahorras el tener una base de datos en el postrgre innecesariamente, y es mas rapido el proceso. No se quizas sea la solución...
  #17 (permalink)  
Antiguo 21/04/2015, 12:04
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años
Puntos: 379
Respuesta: Duplicar base de datos Postgres desde código php

Ya vi que utilizaste template database lo que me hace pensar que quieres que se carguen datos iniciales durante la "instalación", pero estas orientando mal el problema, para eso que estas haciendo necesitas versionar tus esquemas y cargar el mas reciente probado de esta forma siempre puedes regresa al estado anterior si tienes problemas. Mi sugerencia es que vayas por construir una solución que pueda controlar el versionado o buscar algún producto que te resuelva ese problema.
Cita:
Te entiendo NSD... principalmente, y repito, aunque se que puede no ser la mejor opción por temas de mantenimiento, escalabilidad, por ejemplo ... (soy consciente de ello), lo decidido porque cada una de esas instancias podrá ser modificada y ampliada por cada uno de los "propietarios" ...
Es la opción acertada si quieres flexibilidad en cada instancia para agregar servicios que no tendrán todos tus clientes, aquí el punto flaco es el mantenimiento de las "instancias" y como comente vas a requerir un poco mas que template database.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #18 (permalink)  
Antiguo 21/04/2015, 14:10
 
Fecha de Ingreso: agosto-2003
Mensajes: 324
Antigüedad: 20 años, 11 meses
Puntos: 1
Respuesta: Duplicar base de datos Postgres desde código php

Gracias
No he trabajado mucho con postgres.
En efecto necesito cargar ciertos datos de inicio, de ahí lo de template.... Además de que no encontré muchas otras opciones.....
¿A que te refieres con versionar los esquemas?

Gracias
  #19 (permalink)  
Antiguo 21/04/2015, 16:08
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años
Puntos: 379
Respuesta: Duplicar base de datos Postgres desde código php

Cita:
Iniciado por AJDC Ver Mensaje
¿A que te refieres con versionar los esquemas?

Gracias
Tienes que implementar control de versiones, ojo que no me refiero a usar git y mantener los cambios del script, El control de versiones sobre esquemas de base de datos aparte de mantener los cambios, puede gestionar el despliegue y puede deshacer los cambios si es necesario sin dañar la información existente, entre otras cosas. Existen soluciones de paga y de código abierto, ya es cosa que veas que te conviene para el estado actual de tu proyecto con miras al crecimiento que puedas esperar.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: duplicar, postgres
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:12.