Para que serve o banco de dados especial "postgres"?

18

Eu tenho um servidor PostgreSQL com vários bancos de dados em execução. Um dos bancos de dados é chamado postgrese estava lá desde o início. Não pude ver nenhuma tabela dentro e nunca a usei explicitamente, mas notei que qualquer usuário pode criar tabelas no banco de dados (não é isso que eu quero - não quero que nenhum usuário, exceto o administrador, crie quaisquer tabelas em qualquer lugar).

Tenho a sensação de que é algum tipo de banco de dados especial necessário para uma operação normal do servidor, mas qual é exatamente o seu objetivo? Que tipo de dados é (ou poderia ser) armazenado dentro? Ele contém os metadados sobre outros bancos de dados (por exemplo, o information_schema?). Pode acontecer algo desagradável se eu revogar o connectprivilégio deste banco de dados de público? Ou se eu largar?

Pesquisei no Google por meia hora, mas sempre obtive coisas completamente não relacionadas, porque a palavra postgrestambém é usada para o usuário postgrese o próprio DBMS.

R Kiselev
fonte

Respostas:

31

Não há nada de especial nisso. Conforme descrito na documentação do PostgreSQL, Criando um banco de dados , você precisa estar conectado a um banco de dados para criar outro:

Como você precisa estar conectado ao servidor de banco de dados para executar o CREATE DATABASEcomando, a questão permanece: como o primeiro banco de dados em um determinado site pode ser criado. O primeiro banco de dados é sempre criado pelo initdbcomando quando a área de armazenamento de dados é inicializada. (Veja a Seção 17.2.) Esse banco de dados é chamado postgres. Portanto, para criar o primeiro banco de dados "comum" ao qual você pode se conectar postgres.

e nos bancos de dados de modelos :

Nota: template1 e template0não possui nenhum status especial além do fato de que o nome template1é o nome do banco de dados de origem padrão CREATE DATABASE. Por exemplo, pode-se soltar template1e recriá-lo template0sem efeitos nocivos. Esse curso de ação pode ser aconselhável se alguém adicionar descuidadamente um monte de lixo template1. (Para excluir template1, ele deve ter pg_database.datistemplate = false.)

O postgresbanco de dados também é criado quando um cluster de banco de dados é inicializado. Este banco de dados é considerado um banco de dados padrão para conexão de usuários e aplicativos. É simplesmente uma cópia template1e pode ser descartada e recriada, se necessário.

ypercubeᵀᴹ
fonte
3
Sim. Na prática, você geralmente deve deixá-lo vazio e inalterado como um local útil para se conectar. Isso é realmente uma verruga no PostgreSQL, uma conseqüência do fato do PostgreSQL não permitir que você se conecte a "nenhum banco de dados em particular", como outros DBMSs fazem.
Craig Ringer
11
Muito obrigado, esta é uma boa resposta! Neguei o acesso de usuários públicos postgrese tudo ainda funciona, exceto uma coisa: o pgAdmin III não se conecta mais, a menos que eu especifique o banco de dados tarifado no Maintenance DBcampo. Parece que ele costumava se conectar ao postgresbanco de dados antes.
R Kiselev
@RKiselev Sim, funciona assim. Assim como o ypercube escreveu, é o banco de dados padrão ao qual se conectar.
21416 Marcin S.Jul
11
O Pgadmin possui a propriedade "database de manutenção". Basta alterá-lo para o seu banco de dados que você deseja conectar
Sahap Asci
@RKiselev: Sobre o pgAdmin e seu "banco de dados de manutenção": Qual é o banco de dados de manutenção solicitado pelo pgAdmin?
Erwin Brandstetter