À quoi sert la base de données spéciale «postgres»?

18

J'ai un serveur PostgreSQL avec plusieurs bases de données en cours d'exécution. Une des bases de données s'appelle postgres, et elle était là dès le début. Je ne pouvais voir aucune table à l'intérieur et je ne l'ai jamais utilisée explicitement, mais j'ai remarqué que tout utilisateur est autorisé à créer des tables dans la base de données (ce n'est pas ce que je veux - je ne veux pas que d'autres utilisateurs que l'administrateur créent toutes les tables n'importe où).

J'ai le sentiment que c'est une sorte de base de données spéciale qui est requise pour un fonctionnement normal du serveur, mais quel est exactement son but? Quel type de données est (ou pourrait être) stocké à l'intérieur? Contient-il les métadonnées sur d'autres bases de données (par exemple le information_schema?). Peut-il arriver quelque chose de désagréable si je révoque le connectprivilège de cette base de données du public? Ou si je le laisse tomber?

J'ai fait une recherche sur Google pendant une demi-heure, mais j'ai toujours obtenu des informations complètement indépendantes, car le mot postgresest également utilisé pour l'utilisateur postgreset le SGBD lui-même.

R Kiselev
la source

Réponses:

31

Il n'y a rien de spécial à ce sujet. Comme décrit dans la documentation PostgreSQL, Création d'une base de données , vous devez être connecté à une base de données, pour en créer une autre:

Étant donné que vous devez être connecté au serveur de base de données pour exécuter la CREATE DATABASEcommande, la question reste de savoir comment la première base de données d'un site donné peut être créée. La première base de données est toujours créée par la initdbcommande lorsque la zone de stockage de données est initialisée. (Voir Section 17.2.) Cette base de données est appelée postgres. Donc, pour créer la première base de données "ordinaire" à laquelle vous pouvez vous connecter postgres.

et dans les bases de données de modèles :

Remarque: template1 et template0n'ont aucun statut spécial au-delà du fait que le nom template1est le nom de base de données source par défaut pour CREATE DATABASE. Par exemple, on pourrait le supprimer template1et le recréer template0sans aucun effet néfaste. Cette ligne de conduite pourrait être conseillée si l'on a négligemment ajouté un tas de déchets template1. (Pour supprimer template1, il doit avoir pg_database.datistemplate = false.)

La postgresbase de données est également créée lorsqu'un cluster de base de données est initialisé. Cette base de données est conçue comme une base de données par défaut pour les utilisateurs et les applications auxquels se connecter. Il s'agit simplement d'une copie de template1et peut être supprimé et recréé si nécessaire.

ypercubeᵀᴹ
la source
3
Oui. Dans la pratique, vous devez généralement le laisser vide et inchangé comme endroit pratique pour vous connecter. C'est vraiment une verrue dans PostgreSQL, une conséquence du fait que PostgreSQL ne vous permet pas de vous connecter à "aucune base de données en particulier" comme le font d'autres SGBD.
Craig Ringer
1
Merci beaucoup, c'est une bonne réponse! J'ai refusé l'accès aux utilisateurs publics à postgreset tout fonctionne toujours, sauf une chose: pgAdmin III ne se connecte plus sauf si je spécifie la base de données tarée dans le Maintenance DBchamp. Il semble qu'il se connectait postgresauparavant à la base de données.
R Kiselev
@RKiselev Oui, ça fonctionne comme ça. Tout comme ypercube l'a écrit, c'est la base de données par défaut à laquelle se connecter.
Marcin
1
Pgadmin possède la propriété "maintenance database".
Modifiez-le
@RKiselev: A propos de pgAdmin et de sa "base de données de maintenance": Quelle est la
Erwin Brandstetter du