web-dev-qa-db-fra.com

Le propriétaire de la base de données postgresql ne peut pas accéder à la base de données - "Aucune relation trouvée."

J'ai un utilisateur: user_x qui possède une base de données sur postgresql et n'a pas d'attribut ROLE comme (CREATE_DB, SUPERUSER, ...)

Cet utilisateur_x peut accéder à l'ensemble de la base de données, créer des tables (sur sa base de données), sélectionner, insérer et mettre à jour des données.

J'ai cette liste de bases de données:

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)

et les rôles suivants:

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

 ...

Très bien, jusqu'à ce que je vide les données et les restaure sur un autre serveur postgresql.

Après avoir importé les données sur un autre serveur (avec le même nom de base de données et le même utilisateur) et connecté à psql, la commande \ d répond: "Aucune relation trouvée."

J'ai donc ajouté SUPERUTILISATEUR rôle à user_x sur le serveur de base de données importé et tadã user_x peut voir à nouveau les relations et les données.

Mais user_x n'a pas besoin d'avoir le privilège SUPERUSER pour accéder à cette base de données.

Quel est le problème avec ce vidage importé? Quelqu'un sait-il maintenant comment résoudre ce problème?

27
AndreDurao

Peut-être que les autorisations de schéma pour le schéma public ont été modifiées. Quelle est la sortie de \dn+ sur les deux sites?

La sortie devrait ressembler à ceci:

                          List of schemas
  Name  |  Owner   |  Access privileges   |      Description       
--------+----------+----------------------+------------------------
 public | postgres | postgres=UC/postgres | standard public schema
                   : =UC/postgres           
(1 row)

Si la =UC/postgres une partie est manquante, vous pouvez la restaurer avec

grant all on schema public to public;
60
A.H.