22.2. Creación de una base de datos #

Para poder crear una base de datos, el servidor de PostgreSQL debe estar en funcionamiento (ver Section 18.3).

Las bases de datos se crean con el comando SQL CREATE DATABASE:

CREATE DATABASE nombre;

donde nombre sigue las reglas habituales para los identificadores SQL. El rol actual se convierte automáticamente en el propietario de la nueva base de datos. Es privilegio del propietario de una base de datos eliminarla más tarde (lo que también elimina todos los objetos que contiene, incluso si tienen un propietario diferente).

La creación de bases de datos es una operación restringida. Consulta la sección Section 21.2 para saber cómo otorgar permisos.

Dado que necesitas estar conectado al servidor de bases de datos para ejecutar el comando CREATE DATABASE, queda la pregunta de cómo se puede crear la primera base de datos en un sitio determinado. La primera base de datos siempre la crea el comando initdb cuando se inicializa el área de almacenamiento de datos. (Ver Section 18.2). Esta base de datos se llama postgres. Así que para crear la primera base de datos ordinaria puedes conectarte a postgres.

Durante la inicialización del clúster de bases de datos también se crean dos bases de datos adicionales, template1 y template0. Cada vez que se crea una nueva base de datos dentro del clúster, básicamente se clona template1. Esto significa que cualquier cambio que realices en template1 se propaga a todas las bases de datos creadas posteriormente. Debido a esto, evita crear objetos en template1 a menos que quieras que se propaguen a cada base de datos recién creada. template0 está pensada como una copia intacta del contenido original de template1. Se puede clonar en lugar de template1 cuando sea importante crear una base de datos sin tales adiciones locales del sitio. Se ofrecen más detalles en Section 22.3.

Como comodidad, hay un programa que puedes ejecutar desde la shell para crear nuevas bases de datos, createdb.

createdb nombre_bd

createdb no hace ninguna magia. Se conecta a la base de datos postgres y ejecuta el comando CREATE DATABASE, exactamente como se describió anteriormente. La página de referencia de createdb contiene los detalles de invocación. Ten en cuenta que createdb sin ningún argumento creará una base de datos con el nombre del usuario actual.

Note

La sección Chapter 20 contiene información sobre cómo restringir quién puede conectarse a una base de datos determinada.

A veces querrás crear una base de datos para otra persona y hacer que esta se convierta en la propietaria de la nueva base de datos, para que pueda configurarla y gestionarla ella misma. Para lograrlo, usa uno de los siguientes comandos:

CREATE DATABASE nombre_bd OWNER nombre_rol;

desde el entorno SQL, o:

createdb -O nombre_rol nombre_bd

desde la shell. Solo el superusuario tiene permitido crear una base de datos para otra persona (es decir, para un rol del que no eres miembro).