可以在 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(或任何其他方法)中查看表的主要内容,如果未能解决你的问题,请参考以下文章

创建视图时出现 PhpPgAdmin 语法错误

如何在CentOS 7/6.5/6.4 下安装PostgreSQL 9.3 与 phpPgAdmin

在 phppgadmin 中创建数据库时出错

链接服务器 - 可以看到表但不能看到列

使用phppgadmin 遇到的小问题

Sqoop 可以列出表但不能导入数据