\dt 说“没有找到任何关系。”

gkn*_*uth 4 postgresql psql

我已经成功地使用了 Postgres 14,但现在我被难住了。我有一个abc包含表的数据库和架构。

\c abc
\dt     -- shows tables
Run Code Online (Sandbox Code Playgroud)

我创建了一个新的数据库/架构xyz,但我看不到我创建的表:

\c xyc
\dt
Did not find any relations.
Run Code Online (Sandbox Code Playgroud)

如果我使用 PgAdmin4 我可以看到xyz的表格。如果我使用 DbVisualizer 我可以看到xyz的表格。但是,如果我使用psql我得到的所有内容,那么我是用户还是我自己(也是超级用户)Did not find any relations. 似乎并不重要。我在 PgAdmin4 中创建了这些表。这是一个错误吗?我尝试更改数据库或架构中所有对象的所有者,但无论我尝试什么,如果我使用.postgrespsqlxyzxyzpsql

不确定这是否有任何启发:

xyz-# \conninfo
You are connected to database "xyz" as user "postgres" via socket in "/tmp" at port "5432".
xyz=# \l
                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 xyz       | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =Tc/postgres         +
           |          |          |            |            | postgres=CTc/postgres
 abc       | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
Run Code Online (Sandbox Code Playgroud)

gkn*_*uth 7

我看到了这个答案,它部分解决了我遇到的问题(“关系似乎丢失,因为 Postgres 不会将 search_path 复制到新数据库”)。

也就是说,我可以看到这样的表格:

xyz= \dt xyz.*
Run Code Online (Sandbox Code Playgroud)

但不是这样的:

xyz= \dt
Run Code Online (Sandbox Code Playgroud)

我尝试设置搜索路径,目前:

"$user", public
Run Code Online (Sandbox Code Playgroud)

到:

public, xyz
Run Code Online (Sandbox Code Playgroud)

这是另一种的外观(有效的那种),但设置不固定。

更新 这有效:

xyz=# set search_path to xyz,public;
SET
xyz=# show search_path;
 search_path 
-------------
 xyz, public
(1 row)

xyz=# \dt
       List of relations
 Schema |        Name        | Type  |  Owner  
--------+--------------------+-------+---------
 xyz    | aircraft           | table | myname
 xyz    | pilot_availability | table | myname
 xyz    | pilots             | table | myname
 xyz    | sorties            | table | myname
 ...    | ...                | table | myname
Run Code Online (Sandbox Code Playgroud)

不幸的是,似乎设置search_path不粘。我每次启动时都必须psql为此xyz数据库/架构设置它。

但这似乎使设置得以保留:

alter database xyz set search_path = xyz, public;
Run Code Online (Sandbox Code Playgroud)