3

当我使用 pgAdmin 或 Navicat 登录查看我的远程 PostgreSQL 数据库时,我可以毫无问题地连接,并且下面列表中的前三个数据库显示正常。但由于某种原因,我无法让最后两个数据库(“template0”和“template1”)与其他数据库一起显示。此外,当我 ssh 进入服务器的数据库时,我可以运行“SELECT * FROM a_table_in_template1_database;” 它毫无问题地显示了表的所有内容,所以我知道数据库和其中的表一切正常。如何让“template1”数据库显示在此列表中并工作?这是我运行“\list”时 PostgreSQL 的终端输出:

template1=# \list
                                List of databases
     Name      |  Owner   | Encoding | Collation | Ctype |   Access privileges   
---------------+----------+----------+-----------+-------+-----------------------
 mygigline     | jball037 | LATIN1   | en_US     | en_US | 
 mygiglinemain | postgres | LATIN1   | en_US     | en_US | 
 postgres      | postgres | LATIN1   | en_US     | en_US | 
 template0     | postgres | LATIN1   | en_US     | en_US | =c/postgres
 template1     | postgres | LATIN1   | en_US     | en_US | =CTc/postgres
                                                         : postgres=CTc/postgres
(5 rows)

看起来可能有“访问权限”导致了这种情况。但是,我已经完成了类似“GRANT ALL ON DATABASE template1 TO postgres”之类的操作,但这似乎没有帮助。

另一个有用的信息:当我使用 Navicat 登录并显示三个数据库时,我可以单击“打开数据库”选项,然后输入“template1”,它将与其他三个数据库,但我无法单击它或对其进行任何操作。

我只想能够在 Navicat 或 pgAdmin 中显示我的所有 5 个数据库,并且能够访问所有这些数据库:) 任何帮助将不胜感激!

4

1 回答 1

2

这些工具倾向于隐藏数据库 where pg_database.datistemplateis true,因为它们被认为是“内部”数据库而不是普通用户数据库。

客户端应用程序可能会提供取消隐藏这些 DB 的设置,或者您可以直接按名称打开它们。

请注意,这template0通常是一个您无法修改的只读数据库,因此在管理 UI 中访问它几乎没有意义。template1可以连接和修改,但是template1当您创建新数据库时(没有显式TEMPLATE选项),您所做的任何事情都会被复制,因此您通常不想更改它。

我强烈建议您忽略template0and template1。假装它们不存在。

于 2013-04-02T00:20:27.910 回答