"postgres"是一种特殊的数据库,它被用于存储和管理大量结构化数据。它是一个功能强大且可靠的关系型数据库管理系统,广泛应用于各种企业和组织中。"postgres"提供了许多高级功能,如事务处理、并发控制和数据完整性保护,使其成为处理复杂数据操作的理想选择。此外,它还支持扩展性和灵活性,可以根据具体需求进行定制和配置。总之,"postgres"是一个重要的数据库工具,为用户提供了强大的数据管理和分析能力。

我有一个运行着多个数据库的PostgreSQL服务器。其中一个数据库叫做postgres,它从一开始就存在。我无法看到里面的任何表格,而且我从未明确使用过它,但我注意到任何用户都可以在该数据库中创建表格(这不是我想要的 - 除了管理员之外,我不希望任何用户在任何地方创建表格)。 我有一种感觉,它是一种特殊的数据库,用于服务器的正常运行,但是它的确切目的是什么?存储哪种类型的数据(或可能存储哪种类型的数据)?它是否保存其他数据库的元数据(例如information_schema)?如果我从公共中撤销对该数据库的connect权限,会发生什么不好的事情?或者如果我甚至删除它会怎样? 我谷歌搜索了半个小时,但总是得到完全无关的东西,因为单词postgres也用于用户postgres和DBMS本身。
1个回答

这没什么特别的。如PostgreSQL文档所述,创建数据库,您需要连接到一个数据库才能创建另一个数据库:

由于您需要连接到数据库服务器才能执行CREATE DATABASE命令,因此问题是如何在任何给定站点创建第一个数据库。当数据存储区域初始化时,第一个数据库总是由initdb命令创建的。(参见第17.2节。)该数据库称为postgres因此,要创建第一个“普通”数据库,您可以连接到postgres

并且在模板数据库中:

注意:template1和template0除了template1是CREATE DATABASE的默认源数据库名称之外,没有任何特殊状态。例如,可以删除template1并从template0重新创建它,不会产生任何不良影响。如果在template1中粗心添加了一堆垃圾数据,这种做法可能是明智的。(要删除template1,它必须具有pg_database.datistemplate = false属性。) 当初始化数据库集群时,也会创建postgres数据库。这个数据库旨在作为用户和应用程序连接的默认数据库。它只是template1的一个副本,如果需要的话可以删除并重新创建。

4是的。在实践中,通常应该将其保留为空白并不做修改,作为一个方便的连接位置。这实际上是 PostgreSQL 中的一个瑕疵,是由于 PostgreSQL 不像其他数据库管理系统那样允许你连接到"没有特定数据库"。 - Craig Ringer
1非常感谢,这是一个很好的答案!我拒绝了公共用户对postgres的访问权限,一切都还正常,除了一个问题:pgAdmin III无法连接,除非我在“Maintenance DB”字段中指定目标数据库。似乎它以前连接到postgres数据库。 - R Kiselev
@RKiselev 是的,它就是这样工作的。就像 ypercube 所写的那样,它是默认连接的数据库。 - Marcin S.
1Pgadmin有一个"maintenance database"属性。只需将其更改为您想要连接的数据库即可。 - Sahap Asci
@RKiselev:关于pgAdmin及其“维护数据库”:pgAdmin中的维护数据库是什么? - Erwin Brandstetter