什么是特殊数据库“postgres”?

R K*_*lev 18 postgresql

我有一个 PostgreSQL 服务器,上面运行着多个数据库。其中一个数据库名为postgres,它从一开始就存在。我看不到里面的任何表,我从来没有明确使用过它,但我注意到,任何用户都可以在数据库中创建表(这不是我想要的 - 我不希望除管理员之外的任何用户创建任何地方的任何桌子)。

我有一种感觉,它是服务器正常运行所需的某种特殊数据库,但它的目的究竟是什么?什么样的数据(或可能)存储在里面?它是否保存有关其他数据库的元数据(例如information_schema?)。如果我connect从公众那里撤销对该数据库的特权,会发生什么令人讨厌的事情吗?或者,如果我什至放弃它?

我用谷歌搜索了半个小时,但总是得到完全不相关的东西,因为这个词postgres也用于用户postgres和 DBMS 本身。

ype*_*eᵀᴹ 31

没有什么特别之处。如 PostgreSQL 文档创建数据库中所述,您需要连接到一个数据库,以便创建另一个数据库:

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

并在模板数据库中

注: template1template0没有超越的事实名称的任何特殊地位template1是缺省的源数据库名称CREATE DATABASE。例如,可以template1template0没有任何不良影响的情况下删除并重新创建它。如果不小心在template1. (要删除template1,它必须有pg_database.datistemplate = false。)

postgres数据库时,数据库集群初始化也被创建。该数据库旨在作为用户和应用程序连接到的默认数据库。这是一个简单的副本,template1并且可以被丢弃并在必要时重新创建。

  • 是的。在实践中,您通常应该将其留空并保持不变,作为一个方便的连接位置。这确实是 PostgreSQL 中的一个问题,这是因为 PostgreSQL 不允许您像其他 DBMS 那样连接到“没有特别的数据库”这一事实。 (4认同)