permission - El propietario de la base de datos postgresql no puede acceder a la base de datos: "No se encontraron relaciones".
postgres grant all privileges on database to user (1)
Tengo un usuario: user_x que posee una base de datos en postgresql y no tiene ningún atributo ROLE como (CREATE_DB, SUPERUSER, ...)
Este usuario_x puede acceder a toda la base de datos, crear tablas (en su base de datos), seleccionar, insertar y actualizar datos.
Tengo esta lista de bases de datos:
mydatabase=> /l
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
-------------------------+----------+-----------+-----------+-------+-----------------------
postgres | postgres | SQL_ASCII | C | C |
mydatabase | user_x | UTF8 | C | C |
template0 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
whoami | postgres | SQL_ASCII | C | C |
(6 rows)
y los siguientes roles:
mydatabase=> /du
List of roles
Role name | Attributes | Member of
-----------+-----------------------------------+-----------
postgres | Superuser, Create role, Create DB | {}
user_x | | {}
mydatabase=> /d
List of relations
Schema | Name | Type | Owner
--------+-----------------------------------+----------+----------
public | addresses | table | user_x
public | addresses_id_seq | sequence | user_x
public | assignments | table | user_x
public | assignments_id_seq | sequence | user_x
...
De acuerdo, hasta que vuelco los datos y los restauro en otro servidor postgresql.
Después de importar los datos en otro servidor (con el mismo nombre de base de datos y usuario) y de iniciar sesión en psql, el comando / d responde con: "No se encontraron relaciones".
Así que agregué el rol de SUPERUSER a user_x en el servidor de base de datos importado y tadã user_x puede ver las relaciones y los datos nuevamente.
Pero user_x no necesita tener privilegios de SUPERUSER para acceder a esta base de datos.
¿Qué pasa con este volcado importado? ¿Alguien ahora cómo resolver esto?
Tal vez los permisos de esquema para el esquema public
fueron destrozados. ¿Cuál es la salida de /dn+
en ambos sitios?
La salida debería verse así:
List of schemas
Name | Owner | Access privileges | Description
--------+----------+----------------------+------------------------
public | postgres | postgres=UC/postgres | standard public schema
: =UC/postgres
(1 row)
Si falta la parte =UC/postgres
, puede restaurarla con
grant all on schema public to public;