¿Para qué sirve la base de datos especial "postgres"?

18

Tengo un servidor PostgreSQL con varias bases de datos ejecutándose en él. Se llama a una de las bases de datos postgres, y estuvo allí desde el principio. No pude ver ninguna tabla dentro y nunca la he usado explícitamente, pero noté que cualquier usuario puede crear tablas dentro de la base de datos (esto no es lo que quiero, no quiero que ningún usuario excepto el administrador cree cualquier mesa en cualquier lugar).

Tengo la sensación de que es una especie de base de datos especial que se requiere para el funcionamiento normal del servidor, pero ¿cuál es exactamente su propósito? ¿Qué tipo de datos se almacenan (o podrían almacenarse) dentro? ¿Contiene los metadatos sobre otras bases de datos (por ejemplo, el information_schema?). ¿Puede suceder algo desagradable si revoco el connectprivilegio de esta base de datos del público? ¿O si incluso lo dejo caer?

Busqué en Google durante media hora, pero siempre obtuve cosas completamente ajenas, porque la palabra postgrestambién se usa para el usuario postgresy el DBMS.

R Kiselev
fuente

Respuestas:

31

No tiene nada de especial. Como se describe en la documentación de PostgreSQL, Creación de una base de datos , debe estar conectado a una base de datos para crear otra:

Como debe estar conectado al servidor de la base de datos para ejecutar el CREATE DATABASEcomando, la pregunta sigue siendo cómo se puede crear la primera base de datos en un sitio determinado. El initdbcomando siempre crea la primera base de datos cuando se inicializa el área de almacenamiento de datos. (Consulte la Sección 17.2.) Esta base de datos se llama postgres. Entonces, para crear la primera base de datos "ordinaria" a la que puede conectarse postgres.

y en bases de datos de plantilla :

Nota: template1 y template0no tiene ningún estado especial más allá del hecho de que el nombre template1es el nombre predeterminado de la base de datos de origen CREATE DATABASE. Por ejemplo, uno podría soltarlo template1y recrearlo template0sin ningún efecto negativo. Este curso de acción podría ser aconsejable si uno ha agregado descuidadamente un montón de basura template1. (Para eliminar template1, debe tener pg_database.datistemplate = false).

La postgresbase de datos también se crea cuando se inicializa un clúster de base de datos. Esta base de datos está pensada como una base de datos predeterminada para que los usuarios y las aplicaciones se conecten. Es simplemente una copia template1y se puede descartar y volver a crear si es necesario.

ypercubeᵀᴹ
fuente
3
Sí. En la práctica, generalmente debe dejarlo vacío y sin cambios como un lugar útil para conectarse. Esto es realmente una verruga en PostgreSQL, una consecuencia del hecho de que PostgreSQL no le permite conectarse a "ninguna base de datos en particular" como lo hacen otros DBMS.
Craig Ringer
1
Muchas gracias, esta es una buena respuesta! Negué el acceso de los usuarios públicos postgresy todo sigue funcionando, excepto una cosa: pgAdmin III ya no se conecta a menos que especifique la base de datos en el Maintenance DBcampo. Parece que solía conectarse a la postgresbase de datos antes.
R Kiselev
@RKiselev Sí, funciona así. Tal como escribió ypercube , es la base de datos predeterminada para conectarse.
Marcin S.
1
Pgadmin tiene la propiedad "base de datos de mantenimiento". Simplemente cámbielo a su base de datos que desea conectar
Sahap Asci
@RKiselev: Acerca de pgAdmin y su "base de datos de mantenimiento": ¿Qué es la
Erwin Brandstetter