Tengo un evento en la aplicacion con la siguiente function realizar_backup_datos Donde realiza un backup de los datos de mi base de datos.
El problema surge que tarda mucho tiempo. pregunto, es posible, podria agilizar el proceso.?
solo una sugerencia, por que no usar pg_dump?. Podes armar el comando y ejecutarlo con toba_manejador_procesos o sino directamente llamar a un .sh o .bat que lo contenga.
Te tarda porque tenes que ir ciclando por los datos y vas pidiendo las tablas de a una, pg_dump probablemente tenga un metodo mas bulk con lo cual se achica la cantidad de idas y vueltas por red, ademas del procesamiento en si de los datos.
Un tip si es que lo seguis de esta manera, usando la conexion de toba… ya te quedan los datos con el encoding que necesitas, sino en tu caso lo que tendrias que ejecutar luego del connect, seria lo siguiente:
SET CLIENT_ENCODING TO '$encoding';
De esa manera la conversion la hace postgres y vos recibis los datos en el encoding que necesitas, al menos te ahorras el utf8_decode de cada linea. Por otro lado, vas acumulando en la variable $str todas las sentencias de salida, ojo con el tema de la memoria si es que la bd es grande, te puede quedar corta.
Por cierto, es un backup de datos solamente o tambien incluis estructura?.. porque veo que en el ciclo final haces alters para las constraints… pero no veo la creacion de la tabla en si.
En la linea que especifica el comando, al final deberias pegar el nombre de archivo, no el handler que usa PHP… esto es una llamada a sistema asi que tiene que estar todo.
Lo que si, no creo que te vaya a tomar el password asi derecho viejo, me parece que antes tenes que definir una variable de entorno PG_PASSWORD con el valor, por eso te decia que quizas es mas conveniente definir un .bat o un .sh, que reciban como parametros esos datos y ejecute internamente el comando del pg_dump. Una onda asi: