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
.
启动它
你好,我的 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
.