Postgres 用户无法从 public 个表中 select

Postgres user can't select from public tables

你好,我的 postgresql 数据库中有一个用户 \dt 用户输出:

 test=> \dt
                  List of relations
 Schema |           Name           | Type  |  Owner
--------+--------------------------+-------+----------
 public | code                     | table | postgres
 public | code_to_indicator        | table | postgres
 public | indicator                | table | postgres

如您所见,表的所有者是 postgres 但是如果 postgres 用户的 运行 \dt 命令它说:

postgres=# \dt
Did not find any relations.

怎么可能?另外,如果我尝试通过 postgres 用户 select,它也会失败:

postgres=# select * from indicator;
ERROR:  relation "indicator" does not exist
LINE 1: select * from indicator;

有人可以帮忙吗?直到今天一切都很好,出了点问题我什至不知道是什么。 PostgreSQL 版本:11.4

当表名未限定时,能否查看 public 或任何架构中的表取决于 search_path 设置。

如果您没有以永久方式修改 search_path,请在您的会话中发出 RESET search_path; 并重试。

如果 search_path 不是您直接修改的,如何修改?播放由 pg_dump 获得的 SQL 文件具有从搜索路径中删除 public 的效果,这几乎就是这个问题似乎显示的内容。

如果它是通过 ALTER USER postgres SET search_path TO ... 或每个数据库或全局永久修改的,则需要通过等效的 ALTER 命令撤消它。

有关更多信息,请参阅 How does the search_path influence identifier resolution and the "current schema" or PostgreSQL documentation

psql 提示符开头的 postgres=# 表示您已连接到 postgres 数据库,该数据库是作为管理员连接的占位符创建的,通常不会里面没有任何东西。如果您没有在命令行中指定数据库,psql 会查找与用户同名的数据库,因此 postgres 用户将默认连接到此。

要改为连接到 test 数据库,您可以在 psql 提示符中键入 \c test,或者使用 psql -d test.

启动它