特殊数据库“ postgres”有什么用?


18

我有一台PostgreSQL服务器,上面运行着几个数据库。其中一个数据库称为postgres,从一开始就在那里。我看不到任何表,也从未明确使用它,但是我注意到,任何用户都可以在数据库中创建表(这不是我想要的-除了管理员,我不希望任何用户创建表任何地方的任何表格)。

我感觉这是服务器正常运行所需的某种特殊数据库,但是它的确切目的是什么?里面(或可能)存储什么样的数据?它是否保存有关其他数据库的元数据(例如information_schema?)。如果我connect从公共场所撤消了对该数据库的特权,会发生令人讨厌的事情吗?还是我什至掉线了?

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

Answers:


31

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

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

模板数据库中

注意: template1并且template0,除了该名称template1是的默认源数据库名称之外,它没有任何特殊状态CREATE DATABASE。例如,可以删除template1它并重新创建它template0而没有任何不良影响。如果有人不小心在其中添加了一些垃圾,则建议采取这种措施template1。(要删除template1,它必须有pg_database.datistemplate = false。)

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


3
是的 实际上,您通常应该将其留空并保持不变,以方便连接。这实际上是PostgreSQL中的一个缺陷,这是由于PostgreSQL不允许您像其他DBMS一样连接到“没有特定的数据库”这一事实。
Craig Ringer

1
非常感谢,这是一个很好的答案!我拒绝了公共用户的访问,postgres并且一切仍然正常,除了一件事:pgAdmin III不再连接,除非我在Maintenance DB字段中指定目标数据库。看来以前曾经连接postgres数据库。
R Kiselev

@RKiselev是的,它就是这样。就像ypercube所写的一样,它是要连接的默认数据库。
Marcin S.

1
Pgadmin具有“维护数据库”属性。只需将其更改为您要连接的数据库即可
Sahap Asci 2016年

@RKiselev:关于pgAdmin及其“维护数据库”:pgAdmin询问的维护数据库是什么?
Erwin Brandstetter
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.