关于用户权限:postgresql数据库所有者无法访问数据库 – “找不到关系”。

postgresql database owner can't access database - “No relations found.”

我有一个用户:user_x在postgresql上拥有一个数据库,并且没有任何ROLE属性,如(CREATE_DB,SUPERUSER,...)

这个user_x可以访问整个数据库,创建表(在他的数据库上),选择,插入和更新数据。

我有这个数据库列表:

1
2
3
4
5
6
7
8
9
10
11
12
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)

以及以下角色:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

 ...

好吧,直到我转储数据并将其恢复到另一个postgresql服务器上。

在另一台服务器(具有相同的数据库名称和用户)上导入数据并在psql上登录后, d命令回复:"找不到关系"。

所以我在导入的数据库服务器上为user_x添加了SUPERUSER角色并且tad? user_x可以再次查看关系和数据。

但是user_x不需要具有SUPERUSER权限来访问此数据库。

这个导入的转储有什么问题?
现在有人怎么解决这个问题?


也许public架构的架构权限受到了破坏。 两个站点上\dn+的输出是多少?

输出应如下所示:

1
2
3
4
5
6
                          List OF schemas
  Name  |  Owner   |  Access privileges   |      Description      
--------+----------+----------------------+------------------------
 public | postgres | postgres=UC/postgres | standard public schema
                   : =UC/postgres          
(1 ROW)

如果缺少=UC/postgres部分,则可以使用

1
GRANT ALL ON schema public TO public;