Un número pequeño de objetos, como los nombres de roles, bases de datos y tablespaces,
se definen a nivel de clúster (cluster) y se almacenan en el tablespace
pg_global. Dentro del clúster hay
múltiples bases de datos, que están aisladas entre sí pero pueden acceder
a los objetos a nivel de clúster. Dentro de cada base de datos hay múltiples esquemas,
que contienen objetos como tablas y funciones. Así que la jerarquía completa
es: clúster, base de datos, esquema, tabla (u otro tipo de objeto,
como una función).
Al conectarse al servidor de bases de datos, un cliente debe especificar el nombre de la base de datos en su solicitud de conexión. No es posible acceder a más de una base de datos por conexión. Sin embargo, los clientes pueden abrir múltiples conexiones a la misma base de datos o a bases de datos diferentes. La seguridad a nivel de base de datos tiene dos componentes: control de acceso (ver Section 20.1), gestionado a nivel de conexión, y control de autorización (ver Section 5.8), gestionado a través del sistema de permisos (grant). Los conectores de datos externos (foreign data wrappers, ver postgres_fdw) permiten que los objetos de una base de datos actúen como proxies de objetos en otras bases de datos o clústeres. El módulo dblink, más antiguo (ver dblink), proporciona una funcionalidad similar. Por defecto, todos los usuarios pueden conectarse a todas las bases de datos utilizando todos los métodos de conexión.
Si tienes planeado que un clúster de servidores de PostgreSQL contenga proyectos o usuarios no relacionados que no deban, en su mayor parte, conocer la existencia de los demás, se recomienda colocarlos en bases de datos separadas y ajustar las autorizaciones y los controles de acceso en consecuencia. Si los proyectos o usuarios están interrelacionados y, por lo tanto, deberían poder usar los recursos de los demás, deberías colocarlos en la misma base de datos, pero probablemente en esquemas separados; esto proporciona una estructura modular con aislamiento de espacio de nombres y control de autorización. Encontrarás más información sobre la gestión de esquemas en Section 5.10.
Aunque se pueden crear múltiples bases de datos dentro de un solo clúster, se aconseja considerar cuidadosamente si los beneficios superan los riesgos y limitaciones. In particular, el impacto que tiene un WAL compartido (ver Chapter 28) sobre las opciones de respaldo y recuperación. Aunque las bases de datos individuales en el clúster están aisladas desde la perspectiva del usuario, están estrechamente ligadas desde el punto de vista del administrador de la base de datos.
Las bases de datos se crean con el comando CREATE DATABASE
(ver Section 22.2) and destruyen con el
comando DROP DATABASE
(ver Section 22.5).
Para determinar el conjunto de bases de datos existentes, examina el
catálogo del sistema pg_database, por ejemplo:
SELECT datname FROM pg_database;
El metacomando \l del programa psql
y la opción de línea de comandos -l también son útiles para listar las
bases de datos existentes.
El estándar SQL llama a las bases de datos “catálogos” (catalogs), pero no hay diferencia en la práctica.