PostgreSQL中是否始终提供“postgres”数据库?

时间:2015-01-01 13:13:00

标签: postgresql

我正在编写一个需要获取postgres集群中所有数据库的脚本,因此需要连接到数据库(这并不重要)。

可以假设" postgres"数据库将始终可用于连接,或者如果没有,是否有一种编程方式来确定我可以连接到的集群中的任意数据库?

2 个答案:

答案 0 :(得分:2)

根据我的个人经验,是的,几乎可以保证它会存在。但是,根据PostgreSQL官方文档:

The database server itself does not require the postgres database to exist, 
but many external utility programs assume it exists.

所以,你不能假设它总是可用的,虽然在实践中它几乎可以肯定。

答案 1 :(得分:2)

PostgreSQL有三个“系统”数据库:postgres,template0和template1。我很确定所有这些都可以被删除。 (您可能希望在虚拟机中对此进行测试。)我某些可以由特权用户删除postgres和template1。默认情况下,template0不接受连接。

话虽如此,“postgres”的主要目的是给你a database to connect to

  

当数据库集群是时,也会创建postgres数据库   初始化。此数据库用作用户的默认数据库   和连接的应用程序。它只是template1和的副本   如有必要,可以删除并重新创建。

所以这是一个合理的假设,但不是一个防弹的假设。我可以想象一些偏执(小心)商店可能会丢弃“postgres”并使用不同的数据库作为其内部默认值,以防他们的服务器遭到入侵。这有点像使用SSH的非默认端口。