postgresql数据库所有者无法访问数据库-“No relations found.”

fjnneemd  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(3)|浏览(387)

我有一个用户:user_x,它在postgresql上拥有一个数据库,并且没有任何ROLE属性,如(CREATE_DB,SUPERUSER,.)
这个user_x可以访问整个DB,创建表(在他的数据库上),选择,插入和更新数据。
我有一个数据库列表

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)

字符串
以及以下角色:

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角色,这样user_x就可以再次看到关系和数据了。
但是user_x不需要有SUPERUSER权限就可以访问这个数据库。
这个进口的垃圾场有什么问题吗?有没有人知道如何解决这个问题?

pkmbmrz7

pkmbmrz71#

也许public架构的架构权限被破坏了。\dn+在两个站点上的输出是什么?
输出应该如下所示:

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

字符串
如果=UC/postgres部分丢失,可以使用

grant all on schema public to public;

oug3syen

oug3syen2#

未找到任何关系。

如果数据库中没有表,也会出现此错误。

iripmu=# select * from testtable;
 id |    Name
----+------------
  1 | Bear
  2 | Tiger
(2 rows)

iripmu=# drop table if exists testtable;
DROP TABLE
iripmu=# \dt
Did not find any relations.

字符串

yqyhoc1h

yqyhoc1h3#

我使用的是psql 16.0,server 15.1。我在DataGrip中重命名了一个连接,现在我看不到任何表(即使在恢复到以前的名称之后)。我如何显示这些表?

postgres=# \dn+
                                       List of schemas
  Name  |       Owner       |           Access privileges            |      Description       
--------+-------------------+----------------------------------------+------------------------
 public | pg_database_owner | pg_database_owner=UC/pg_database_owner+| standard public schema
        |                   | =U/pg_database_owner                   |

字符串

相关问题