postgres please pg_dump create consola appears and database postgresql restore

database - please - psql restore sql file



Error pg_restore: el rol XXX no existe (1)

Me di cuenta de que el --no-owner no es lo mismo que el -x . pg_dump el -x a todos los comandos pg_dump , lo que significa:

-x, --no-privileges do not dump privileges (grant/revoke)

que en efecto excluye los comandos GRANT / REVOKE ofensivos del volcado. Problema resuelto.

Intentando replicar una base de datos de un sistema a otro. Las versiones involucradas son 9.5.0 (fuente) y 9.5.2 (objetivo).

El nombre de la fuente db es foodb con el propietario pgdba y el nombre de la db de destino se llamará foodb_dev con el propietario pgdev .

Todos los comandos se ejecutan en el sistema de destino que albergará la réplica.

El comando pg_dump es:

pg_dump -f schema_backup.dump --no-owner -Fc -U pgdba -h $PROD_DB_HOSTNAME -p $PROD_DB_PORT -d foodb -s --clean;

Esto se ejecuta sin errores.

El pg_restore correspondiente es:

pg_restore --no-owner --if-exists -1 -c -U pgdev -d foodb_dev schema_backup.dump

que arroja error:

pg_restore: [archiver (db)] Error while PROCESSING TOC: pg_restore: [archiver (db)] Error from TOC entry 3969; 0 0 ACL public pgdba pg_restore: [archiver (db)] could not execute query: ERROR: role "pgdba" does not exist Command was: REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM pgdba; GRANT ALL ON SCHEMA public TO pgdba; GRANT ...

Si genero el archivo de volcado en formato de texto plano ( -Fp ) veo que incluye varias entradas como:

REVOKE ALL ON TABLE dump_thread FROM PUBLIC; REVOKE ALL ON TABLE dump_thread FROM pgdba; GRANT ALL ON TABLE dump_thread TO pgdba; GRANT SELECT ON TABLE dump_thread TO readonly;

que intentan establecer privilegios para el usuario pgdba que, por supuesto, ni siquiera existe como usuario en el sistema de destino que solo tiene usuario pgdev y, por lo tanto, los errores de pg_restore .

En la fuente db los privilegios, por ejemplo, de la tabla dump_thread :

# /dp+ dump_thread Access privileges -[ RECORD 1 ]-----+-------------------- Schema | public Name | dump_thread Type | table Access privileges | pgdba=arwdDxt/pgdba+ | readonly=r/pgdba Column privileges | Policies |

Una solución rápida sería simplemente agregar un usuario pgdba en el clúster de destino y terminar con él.

Pero, ¿no debería el --no-owner hacerse cargo de no incluir los comandos específicos del propietario en el volcado en primer lugar?