must - psql example
Importar base de datos de postgres sin roles (5)
La respuesta que podría estar buscando es agregar el --no-owner
al comando pg_restore
. A diferencia de la respuesta aceptada en este momento, el comando debe crear cada objeto con el usuario actual, incluso si el rol en el volcado no existe en la base de datos.
Por lo tanto, pg_restore no omitirá ningún elemento, pero si algunos elementos importados son propiedad de diferentes usuarios, todos los registros serán propiedad de un solo usuario por lo que yo sepa.
Tengo una base de datos que se exportó con pg_dump, pero ahora cuando intento importarla de nuevo con:
psql -d databasename < mydump.sql
No intenta otorgar roles a personas que no existen. (El error dice "Rol" xxx "no existe")
¿Hay alguna manera de importar y establecer todos los roles automáticamente a mi usuario?
El comportamiento predeterminado de la importación es que reemplaza todas las funciones que no conoce con la función con la que realiza la importación. De modo que, dependiendo de para qué necesite la base de datos, puede importar importarla e ignorar los mensajes de error.
Citando de http://www.postgresql.org/docs/9.2/static/backup-dump.html#BACKUP-DUMP-RESTORE
Antes de restaurar un volcado de SQL, todos los usuarios que poseen objetos o se les concedieron permisos sobre objetos en la base de datos volcada ya deben existir. Si no lo hacen, la restauración no podrá recrear los objetos con la propiedad y / o los permisos originales. (A veces esto es lo que quieres, pero por lo general no es así).
Sí, puede volcar todos los objetos "globales" de su base de datos con la opción -g de pg_dumpall:
pg_dumpall -g > globals.sql
Luego ejecute globals.sql contra su base de datos de destino antes de importar.
Con pg_restore
puede usar la opción --role=rolename
para forzar el uso de un nombre de rol para realizar la restauración. Pero el volcado debe ser formato de texto no plano.
Por ejemplo, puedes volcar con:
pg_dump -F c -Z 9 -f my_file.backup my_database_name
y que puedes restaurarlo con:
pg_restore -d my_database_name --role=my_role_name my_file.backup
para más información: http://www.postgresql.org/docs/9.2/static/app-pgrestore.html
Bueno, puedes crear una nueva función con el mismo nombre que te falta, y luego importar volcado sin errores.
el error dice "Rol" xxx "no existe", así que créelo :)