可以在 phpPgAdmin 中查看表,但不能在 psql(或任何其他方法)中查看表
Posted
技术标签:
【中文标题】可以在 phpPgAdmin 中查看表,但不能在 psql(或任何其他方法)中查看表【英文标题】:Can see tables in phpPgAdmin but not in psql (or any other method) 【发布时间】:2014-07-11 13:06:23 【问题描述】:我最近在我的 Mac 上安装了 postgres,并从我试图在本地复制的公共网站加载了一个转储。 pg_restore 似乎成功了,我可以在 phpPgAdmin 中看到我所有的表和用户权限。它们看起来都很正常,我可以浏览数据。但是,当我通过 psql 访问数据库时,找不到任何关系。同样,我有访问该数据库的 python 脚本,它们也找不到任何表。
我不知道该怎么办。
这是我做过的一些 psql 命令:
> psql -U mgd_dbo pub_mgd
psql (9.3.4)
Type "help" for help.
pub_mgd=# \d
No relations found.
pub_mgd=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------------+------------+----------+------------------+-------+-------------------------
postgres | postgres | UTF8 | C | C | =CTc/postgres +
| | | | | postgres=CTc/postgres +
| | | | | mgd_dbo=CTc/postgres +
| | | | | mgd_public=CTc/postgres
pub_fe | postgres | LATIN9 | en_US.ISO8859-15 | C | =CTc/postgres +
| | | | | postgres=CTc/postgres +
| | | | | mgd_dbo=CTc/postgres +
| | | | | mgd_public=CTc/postgres
pub_mgd | postgres | LATIN9 | en_US.ISO8859-15 | C | =CTc/postgres +
| | | | | postgres=CTc/postgres +
| | | | | mgd_dbo=CTc/postgres +
| | | | | mgd_public=CTc/postgres
template0 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
(5 rows)
pub_mgd=# \dn+
List of schemas
Name | Owner | Access privileges | Description
--------+----------+----------------------+------------------------
mgd | mgd_dbo | mgd_dbo=UC/mgd_dbo +|
| | mgd_public=U/mgd_dbo |
public | postgres | postgres=UC/postgres+| standard public schema
| | =UC/postgres |
(2 rows)
pub_mgd 是我加载的数据库。 mgd_public 和 mgd_dbo 是我们的脚本使用的两个不同的用户(mgd_public 是只读用户)。 我已经尝试过这两个用户,甚至是 postgres 用户。然而,结果是一样的,没有关系。
我什至试图查看 phpPgAdmin 是否以某种方式访问了不同的 postgres 服务器,因此我通过它添加了一个新数据库,并验证了当我在 psql 中执行 \l 时新数据库是否出现。
关于下一步检查什么有什么建议吗?
【问题讨论】:
【参考方案1】:询问mgd
架构中的关系列表
\d mgd.*
要将 mgd
架构设为默认架构,请将其放在搜索路径的开头
set search_path to mgd, "$user", public;
【讨论】:
那行得通。它显示了所有表,我可以通过在查询中指定模式来访问它们。那么我该怎么做才能在不指定架构的情况下访问它们(就像我所有的脚本一样)?比如我想和select * from mgi_dbinfo
连接,而不是select * from mgd.mgi_dbinfo
。
@kevinrstone 已更新。
谢谢。我没有意识到我们为公共服务器上的角色专门设置了 search_paths。我一直认为默认是搜索所有模式。 alter user mgd_public set search_path to mgd, "$user", public;
足以修复我所有脚本的角色。以上是关于可以在 phpPgAdmin 中查看表,但不能在 psql(或任何其他方法)中查看表的主要内容,如果未能解决你的问题,请参考以下文章