Buenas Tardes a todos en la lista.

Tengo una duda con respecto a pg_dump y pg_restore, posiblemente alguno de
ustedes ya vio esto.

existe alguna forma de copiar un esqema (ej : "public") de una base de
datos "bd_origen" a otra base de datos "bd_destino" y ademas decirle el
nombre del esquema con el que se va a copiar ("ej: esquema_nuevo") de tal
forma que el esquema "public" de mi BD "bd_origen" se guarde en mi BD
"bd_destino" en el esquema "esqema_nuevo". buescando en la red, encontre
que podia hacerlo generando y restaurando backups utilizando pg_dump y
pg_restore .

No tuve ningun problema al generar el backup y tampoco tuve complicacion al
restaurar el esqema que necesitaba todo esto desde JAVA.

Este es el codigo java que me genera el backup completo (Esto por que lei
en algunos foros que es mejor hacer un backup completo ya que te da mas
opciones al momento de restaurarlo)

ProcessBuilder pb;
Process p;
pb = new ProcessBuilder("/opt/PostgreSQL/9.2/pgAdmin3/bin/pg_dump", "-i",
                            "-h", "192.168.1.107",
                            "-p", "5432",
                            "-U", "postgres",
                            "-F", "c",
                            "-b",
                            "-v" ,
                            "-f",
"/home/ptt/Escritorio/copia_bd_origen.backup",
                            "bd_origen");
pb.environment().put("PGPASSWORD", "123456");
pb.redirectErrorStream(true);
p = pb.start();


este es el codigo que lo restaura donde le especifico que solo me restaure
el esquema "public"

pb = new ProcessBuilder("/opt/PostgreSQL/9.2/pgAdmin3/bin/pg_restore",

                            "-h", "localhost",
                            "-p", "5432",
                            "-U", "postgres",
                            "-d", "bd_destino",
                            "-n", "public",
                            "-c",
                            "-e",
                            "-v",
                            "/home/ptt/Escritorio/copia_bd_origen.backup");
                    pb.environment().put("PGPASSWORD", "123456");
                    pb.redirectErrorStream(true);
                    p = pb.start();


después de haber restaurado revise si se había restaurado de forma correcta
y vi que todo estaba bien a excepción de las funciones ya que en la BD
"bd_destino" no estaban todas las funciones que tenia en la "bd_origen",
revisando encontré que se trataban de algunas funciones especiales que
utilice para crostab y eran esas las funciones que faltaban

NOTA: también probé en restaurar toda la BD por si me había equivocado al
hacer el backup, pero cuando restaure el backup completo ahí si están todas
las funciones incluyendo las funciones de crostab. El problema solo ocurre
cuando especifico que se restaure el esquema "public" que es el que tiene
las funciones para crostab pero no las restaura.

es en este punto del cual no puedo pasar y recurro a ustedes por su ayuda.

1: existe alguna forma de solucionar el problema de las funciones faltantes
(que me copie todas las funciones incluyendo las funciones especiales como
las del crostab)

2: existe alguna forma para especificarle que el esquema que quiero
restaurar se restaure un esquema que yo le defina.

tal vez la solución que eh usado no es la mas adecuada y existen otras
formas para hacerlo.

tal vez exista otras formas para copiar esquemas ya sea entre base de datos
o en la misma base de datos.


De antemano muchas gracias.

Atte: Roberto Almanza

Responder a