A cosa serve il database speciale "postgres"?


18

Ho un server PostgreSQL con diversi database in esecuzione su di esso. Viene chiamato uno dei database postgresed era lì fin dall'inizio. Non ho potuto vedere alcuna tabella all'interno e non l'ho mai usato esplicitamente, ma ho notato che a qualsiasi utente è consentito creare tabelle all'interno del database (questo non è quello che voglio - non voglio che nessun utente tranne l'amministratore crei qualsiasi tavolo ovunque).

Ho la sensazione che sia una specie di database speciale necessario per il normale funzionamento del server, ma qual è esattamente il suo scopo? Che tipo di dati sono (o potrebbero essere) memorizzati all'interno? Contiene i metadati relativi ad altri database (ad esempio il information_schema?). Può succedere qualcosa di brutto, se revoco il connectprivilegio a questo database dal pubblico? O se lo faccio cadere?

Ho cercato su Google per mezz'ora, ma ho sempre avuto cose completamente indipendenti, perché la parola postgresviene utilizzata anche per l'utente postgrese il DBMS stesso.

Risposte:


31

Non c'è niente di speciale al riguardo. Come descritto nella documentazione di PostgreSQL, Creazione di un database , è necessario essere collegati a un database, al fine di crearne un altro:

Poiché è necessario essere connessi al server di database per eseguire il CREATE DATABASEcomando, rimane la domanda su come creare il primo database in un determinato sito. Il primo database viene sempre creato dal initdbcomando quando viene inizializzata l'area di archiviazione dei dati. (Vedi Sezione 17.2.) Questo database è chiamato postgres. Quindi, per creare il primo database "ordinario" a cui è possibile connettersi postgres.

e nei database dei modelli :

Nota: template1 e template0non hanno uno stato speciale oltre al fatto che il nome template1è il nome del database di origine predefinito per CREATE DATABASE. Ad esempio, si potrebbe lasciar perdere template1e ricrearlo template0senza effetti negativi. Questa linea di condotta potrebbe essere consigliabile se uno ha aggiunto con noncuranza un mucchio di spazzatura template1. (Per eliminare template1, deve avere pg_database.datistemplate = false.)

Il postgresdatabase viene inoltre creato quando viene inizializzato un cluster di database. Questo database è inteso come database predefinito a cui gli utenti e le applicazioni possono connettersi. È semplicemente una copia di template1e può essere lasciato cadere e ricreato se necessario.


3
Sì. In pratica dovresti generalmente lasciarlo vuoto e invariato come un luogo utile a cui collegarti. Questa è davvero una verruca in PostgreSQL, una conseguenza del fatto che PostgreSQL non ti consente di collegarti a "nessun database in particolare" come fanno altri DBMS.
Craig Ringer,

1
Grazie mille, questa è una buona risposta! Ho negato l'accesso degli utenti pubblici postgrese tutto funziona ancora, tranne una cosa: pgAdmin III non si connette più a meno che non specifichi il database di destinazione nel Maintenance DBcampo. Sembra che prima si connettesse al postgresdatabase.
R Kiselev,

@RKiselev Sì, funziona così. Proprio come ha scritto ypercube , è il database predefinito a cui connettersi.
Marcin S.

1
Pgadmin ha la proprietà "database di manutenzione". Basta cambiarlo nel proprio db che si desidera connettere
Sahap Asci,

@RKiselev: Informazioni su pgAdmin e il suo "database di manutenzione": che cosa richiede il DB di manutenzione di pgAdmin?
Erwin Brandstetter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.