Hice una copia de seguridad en la base de datos en un servidor diferente y ese tiene un rol diferente al que necesito, con este comando:
pg_dump -Fc db_name -f db_name.dump
Luego copié la copia de seguridad en otro servidor donde necesito restaurar la base de datos, pero no existe tal propietario que se utilizó para esa base de datos. Digamos que la base de datos tiene propietario owner1
, pero en un servidor diferente solo tengo owner2
y necesito restaurar esa base de datos y cambiar de propietario.
Lo que hice en otro servidor al restaurar:
createdb -p 5433 -T template0 db_name
pg_restore -p 5433 --role=owner2 -d db_name db_name.dump
Pero cuando se ejecuta la restauración, obtengo estos errores:
pg_restore: [archiver (db)] could not execute query: ERROR: role "owner1" does not exist
¿Cómo puedo especificarlo para que cambie de propietario? ¿O es imposible?
--no-owner
lo sugerido en la respuesta aceptada, es posible que también necesite--no-privileges
. Ver esta respuestaRespuestas:
Debe usar la
--no-owner
opción, esto deja depg_restore
intentar establecer la propiedad de los objetos en el propietario original. En cambio, los objetos serán propiedad del usuario especificado por--role
createdb -p 5433 -T template0 db_name pg_restore -p 5433 --no-owner --role=owner2 -d db_name db_name.dump
pg_restore doc
fuente
pg_dump --no-owner
también debería hacerlo--role
un propietario diferente, todavía estaba tratando de usar el propietario original (pero luego no lo usé--no-owner
.