Postgresql 服务器上名为 postgres 的默认数据库

Posted

技术标签:

【中文标题】Postgresql 服务器上名为 postgres 的默认数据库【英文标题】:Default database named postgres on Postgresql server 【发布时间】:2011-01-23 03:41:25 【问题描述】:

显然,在每个 postgresql 服务器安装上默认创建一个数据库“postgres”。谁能告诉我或指向我记录它的用途?

【问题讨论】:

【参考方案1】:

它似乎并没有明确的目的。根据文档:

创建数据库集群包括创建数据库数据所在的目录、生成共享目录表(属于整个集群而不是任何特定数据库的表),以及创建“template1”和“postgres” “数据库。

[...]

postgres 数据库是供用户、实用程序和第三方应用程序使用的默认数据库。

(来源:http://www.postgresql.org/docs/current/app-initdb.html

【讨论】:

【参考方案2】:

还有数据库模板0,当你搞砸所有其他人时,你的安全网。

    postgres 是您的默认数据库 联系。 template1 是您的默认值 创建新的数据库,这些是 像 template1 一样创建 template0 在 template1 时很有用 已损坏(设置错误等) 你不想花很多钱 是时候解决这个问题了。就放下 模板1并创建一个新模板1 使用数据库模板0。

【讨论】:

如果您不使用postgres 数据库,删除它是否安全? @CMCDragonkai,如果我没记错的话,你仍然需要postgres 数据库或类似的东西。例如,如果您使用删除和重新创建应用程序数据库的选项来转储数据库,那么当您尝试恢复到同一个数据库时,它将无法工作,因为您已连接到您尝试删除和创建的数据库. 所以你必须连接到数据库才能删除数据库,连接到运行数据库的服务器还不够?【参考方案3】:

当客户端应用程序连接到 Postgres 服务器时,它必须指定它想要连接到的数据库。如果您不知道数据库的名称(在您连接的 postmaster 服务的集群内),您可以使用以下命令找到数据库名称列表:

psql -l

当您运行该命令时,psql 会连接到服务器并查询 pg_database 以获取数据库名称列表。但是,由于 psql 是 Postgres 客户端应用程序,它无法在不知道至少一个数据库名称的情况下连接到服务器:Catch-22。因此,当您运行psql -l 时,psql 被硬编码以连接到名为“postgres”的数据库,但在这种情况下您可以指定一个模板数据库:

psql -l -d template1

【讨论】:

【参考方案4】:

如果您在创建新数据库时使用多个数据库连接,则无法对template1template0 进行所有连接。

如果在创建新数据库时源数据库被其他连接访问,Postgresql 将抛出错误。

所以要创建新的数据库,最好连接postgres

【讨论】:

【参考方案5】:

上面的评论问:“如果你不使用它,删除 postgres 数据库是否安全?” - CMCDragonkai 2016 年 10 月 22 日 10:37

From the PostgreSQL documentation

初始化后,一个数据库集群将包含一个名为 postgres 的数据库,它是实用程序、用户和第三方应用程序使用的默认数据库。数据库服务器本身不需要 postgres 数据库存在,但许多外部实用程序假定它存在。

[注意:数据库集群是由正在运行的数据库服务器的单个实例管理的数据库集合。]

【讨论】:

以上是关于Postgresql 服务器上名为 postgres 的默认数据库的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu PostgreSQL安装和配置

如何在Debian 8/7上安装PostgreSQL 9.6

CentOS 6.9下安装PostgreSQL

postgresql学习笔记角色

错误是:没有名为 postgresql.base 的模块

PostgreSQL - 用户“postgres”的对等身份验证失败