CREATE DATABASE

CREATE DATABASE — crear una nueva base de datos

Synopsis

CREATE DATABASE name
    [ WITH ] [ OWNER [=] user_name ]
           [ TEMPLATE [=] template ]
           [ ENCODING [=] encoding ]
           [ STRATEGY [=] strategy ]
           [ LOCALE [=] locale ]
           [ LC_COLLATE [=] lc_collate ]
           [ LC_CTYPE [=] lc_ctype ]
           [ BUILTIN_LOCALE [=] builtin_locale ]
           [ ICU_LOCALE [=] icu_locale ]
           [ ICU_RULES [=] icu_rules ]
           [ LOCALE_PROVIDER [=] locale_provider ]
           [ COLLATION_VERSION = collation_version ]
           [ TABLESPACE [=] tablespace_name ]
           [ ALLOW_CONNECTIONS [=] allowconn ]
           [ CONNECTION LIMIT [=] connlimit ]
           [ IS_TEMPLATE [=] istemplate ]
           [ OID [=] oid ]

Descripción

CREATE DATABASE crea una nueva base de datos de PostgreSQL.

Para crear una base de datos, debes ser superusuario o tener el privilegio especial CREATEDB. Consulta la CREATE ROLE.

Por defecto, la nueva base de datos se creará clonando la base de datos de sistema estándar template1. Se puede especificar una plantilla diferente escribiendo TEMPLATE name. En particular, al escribir TEMPLATE template0, puedes crear una base de datos virgen (una en la que no existen objetos definidos por el usuario y donde los objetos del sistema no se han alterado) que contenga solo los objetos estándar predefinidos por tu versión de PostgreSQL. Esto es útil si deseas evitar copiar cualquier objeto local de la instalación que se haya podido añadir a template1.

Parámetros

name #

El nombre de la base de datos a crear.

user_name #

El nombre de rol del usuario que será propietario de la nueva base de datos, o DEFAULT para usar el valor por defecto (a saber, el usuario que ejecuta el comando). Para crear una base de datos propiedad de otro rol, debes poder hacer SET ROLE a ese rol.

template #

El nombre de la plantilla a partir de la cual se creará la nueva base de datos, o DEFAULT para usar la plantilla por defecto (template1).

encoding #

Codificación del juego de caracteres a utilizar en la nueva base de datos. Especifica una constante de cadena (por ejemplo, 'SQL_ASCII'), o un número entero de codificación, o DEFAULT para usar la codificación por defecto (a saber, la codificación de la base de datos plantilla). Los juegos de caracteres admitidos por el servidor PostgreSQL se describen en la Section 23.3.1. Consulta a continuación las restricciones adicionales.

strategy #

Estrategia a utilizar al crear la nueva base de datos. Si se utiliza la estrategia WAL_LOG, la base de datos se copiará bloque por bloque y cada bloque se escribirá por separado en el registro de escritura anticipada (WAL). Esta es la estrategia más eficiente en los casos en que la base de datos plantilla es pequeña y, por lo tanto, es la predeterminada. La estrategia más antigua FILE_COPY también está disponible. Esta estrategia escribe un pequeño registro en el WAL para cada tablespace utilizado por la base de datos de destino. Cada uno de estos registros representa la copia de un directorio completo a una nueva ubicación a nivel del sistema de archivos. Aunque esto reduce sustancialmente el volumen del WAL, especialmente si la base de datos plantilla es grande, también obliga al sistema a realizar un punto de control (checkpoint) tanto antes como después de la creación de la nueva base de datos. En algunas situaciones, esto puede tener un impacto negativo notable en el rendimiento general del sistema. La estrategia FILE_COPY se ve afectada por el ajuste file_copy_method.

locale #

Establece el orden de colación por defecto y la clasificación de caracteres en la nueva base de datos. La colación afecta al orden de clasificación aplicado a las cadenas de caracteres, por ejemplo, en consultas con ORDER BY, así como al orden utilizado en los índices de columnas de texto. La clasificación de caracteres afecta a la categorización de los mismos, por ejemplo, minúsculas, mayúsculas y dígitos. También establece los aspectos asociados del entorno del sistema operativo, LC_COLLATE y LC_CTYPE. El valor por defecto es la misma configuración que la de la base de datos plantilla. Consulta Section 23.2.2.3.1 y Section 23.2.2.3.2 para obtener más detalles.

Se puede anular configurando de forma individual lc_collate, lc_ctype, builtin_locale o icu_locale.

Si locale_provider es builtin, entonces se debe especificar locale o builtin_locale y establecerlo en C, C.UTF-8 o PG_UNICODE_FAST.

Tip

Los otros ajustes de localización lc_messages, lc_monetary, lc_numeric y lc_time no son fijos por base de datos y no se establecen con este comando. Si deseas hacerlos predeterminados para una base de datos específica, puedes utilizar ALTER DATABASE ... SET.

lc_collate #

Establece LC_COLLATE en el entorno del sistema operativo del servidor de la base de datos. El valor por defecto es la configuración de locale si se especifica; de lo contrario, la misma configuración que la base de datos plantilla. Consulta a continuación las restricciones adicionales.

Si locale_provider es libc, también establece el orden de colación por defecto a utilizar en la nueva base de datos, anulando la configuración locale.

lc_ctype #

Establece LC_CTYPE en el entorno del sistema operativo del servidor de la base de datos. El valor por defecto es la configuración de locale si se especifica; de lo contrario, la misma configuración que la base de datos plantilla. Consulta a continuación las restricciones adicionales.

Si locale_provider es libc, también establece la clasificación de caracteres por defecto a utilizar en la nueva base de datos, anulando la configuración de locale.

builtin_locale #

Especifica la localización del proveedor integrado (builtin) para el orden de colación por defecto y la clasificación de caracteres de la base de datos, anulando la configuración de locale. El proveedor de localización debe ser builtin. El valor por defecto es la configuración de locale si se especifica; de lo contrario, la misma configuración que la base de datos plantilla.

Las localizaciones disponibles para el proveedor builtin son C, C.UTF-8 y PG_UNICODE_FAST.

icu_locale #

Especifica la localización de ICU (consulta la Section 23.2.2.3.2) para el orden de colación por defecto y la clasificación de caracteres de la base de datos, anulando la configuración de locale. El proveedor de localización debe ser ICU. El valor por defecto es la configuración de locale si se especifica; de lo contrario, la misma configuración que la base de datos plantilla.

icu_rules #

Especifica reglas de colación adicionales para personalizar el comportamiento de la colación por defecto de esta base de datos. Esto solo es compatible con ICU. Consulta la Section 23.2.3.4 para obtener más detalles.

locale_provider #

Especifica el proveedor a utilizar para la colación por defecto en esta base de datos. Los valores posibles son builtin, icu (si el servidor se compiló con soporte para ICU) o libc. Por defecto, el proveedor es el mismo que el de la template. Consulta la Section 23.1.4 para obtener más detalles.

collation_version #

Especifica la cadena de versión de colación a almacenar con la base de datos. Normalmente, esto debería omitirse, lo que hará que la versión se calcule a partir de la versión real de la colación de la base de datos según la proporcione el sistema operativo. Esta opción está diseñada para ser utilizada por pg_upgrade para copiar la versión de una instalación existente.

Consulta también la ALTER DATABASE para saber cómo manejar los desajustes de versión de colación de la base de datos.

tablespace_name #

El nombre del tablespace que se asociará con la nueva base de datos, o DEFAULT para utilizar el tablespace de la base de datos plantilla. Este tablespace será el predeterminado para los objetos creados en esta base de datos. Consulta la CREATE TABLESPACE para obtener más información.

allowconn #

Si es false, nadie podrá conectarse a esta base de datos. El valor por defecto es true, lo que permite las conexiones (excepto las restringidas por otros mecanismos, como GRANT/REVOKE CONNECT).

connlimit #

Número de conexiones concurrentes que se pueden realizar a esta base de datos. El valor por defecto es -1, lo que significa que no hay límite.

istemplate #

Si es true, cualquier usuario con privilegios CREATEDB puede clonar esta base de datos; si es false (el valor por defecto), solo los superusuarios o el propietario de la base de datos pueden clonarla.

oid #

El identificador de objeto (OID) a utilizar para la nueva base de datos. Si no se especifica este parámetro, PostgreSQL elegirá un OID adecuado automáticamente. Este parámetro está pensado principalmente para uso interno de pg_upgrade, y solo pg_upgrade puede especificar un valor menor de 16384.

Los parámetros opcionales se pueden escribir en cualquier orden, no solo en el orden ilustrado anteriormente.

Notas

CREATE DATABASE no se puede ejecutar dentro de un bloque de transacción.

Los errores del tipo could not initialize database directory (no se pudo inicializar el directorio de la base de datos) están relacionados muy probablemente con permisos insuficientes en el directorio de datos, un disco lleno u otros problemas del sistema de archivos.

Usa DROP DATABASE para eliminar una base de datos.

El programa createdb es un envoltorio de este comando, proporcionado para su conveniencia.

Los parámetros de configuración a nivel de base de datos (establecidos mediante ALTER DATABASE) y los privilegios a nivel de base de datos (establecidos mediante GRANT) no se copian de la base de datos plantilla.

Aunque es posible copiar una base de datos distinta de template1 especificando su nombre como plantilla, esto no está pensado (todavía) como una utilidad de uso general para COPY DATABASE. La principal limitación es que ninguna otra sesión puede estar conectada a la base de datos plantilla mientras se copia. CREATE DATABASE fallará si existe cualquier otra conexión cuando comience; de lo contrario, se bloquearán las nuevas conexiones a la base de datos plantilla hasta que CREATE DATABASE finalice. Consulta la Section 22.3 para obtener más información.

La codificación del juego de caracteres especificada para la nueva base de datos debe ser compatible con la configuración de localización elegida (LC_COLLATE y LC_CTYPE). Si la localización es C (o equivalentemente POSIX), se permiten todas las codificaciones, pero para otras configuraciones de localización solo hay una codificación que funcionará correctamente. (En Windows, sin embargo, la codificación UTF-8 se puede utilizar con cualquier localización). CREATE DATABASE permitirá a los superusuarios especificar la codificación SQL_ASCII independientemente de la configuración de localización, pero esta opción está obsoleta y puede provocar un comportamiento erróneo de las funciones de cadenas de caracteres si se almacenan en la base de datos datos que no son compatibles con la codificación de la localización.

Los ajustes de codificación y localización deben coincidir con los de la base de datos plantilla, excepto cuando se utiliza template0 como plantilla. Esto se debe a que otras bases de datos podrían contener datos que no coincidan con la codificación especificada, o podrían contener índices cuyo orden de clasificación se vea afectado por LC_COLLATE y LC_CTYPE. Copiar dichos datos daría como resultado una base de datos corrupta según los nuevos ajustes. template0, sin embargo, se sabe que no contiene datos ni índices que puedan verse afectados.

Actualmente no hay ninguna opción para utilizar una localización de base de datos con comparaciones no deterministas (consulta CREATE COLLATION para obtener una explicación). Si esto es necesario, se tendrían que utilizar colaciones por columna.

La opción CONNECTION LIMIT solo se aplica de forma aproximada; si dos nuevas sesiones se inician casi al mismo tiempo cuando solo queda un hueco de conexión para la base de datos, es posible que ambas fallen. Además, el límite no se aplica a los superusuarios ni a los procesos auxiliares de fondo (background workers).

Ejemplos

Para crear una nueva base de datos:

CREATE DATABASE lusiadas;

Para crear una base de datos sales propiedad del usuario salesapp con un tablespace por defecto salesspace:

CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;

Para crear una base de datos music con una localización diferente:

CREATE DATABASE music
    LOCALE 'sv_SE.utf8'
    TEMPLATE template0;

En este ejemplo, la cláusula TEMPLATE template0 es obligatoria si la localización especificada es diferente de la de template1. (Si no lo es, especificar la localización explícitamente es redundante).

Para crear una base de datos music2 con una localización diferente y una codificación de juego de caracteres diferente:

CREATE DATABASE music2
    LOCALE 'sv_SE.iso885915'
    ENCODING LATIN9
    TEMPLATE template0;

Los ajustes de localización y codificación especificados deben coincidir, o de lo contrario se informará de un error.

Ten en cuenta que los nombres de las localizaciones son específicos del sistema operativo, por lo que los comandos anteriores podrían no funcionar de la misma manera en todas partes.

Compatibilidad

No existe una instrucción CREATE DATABASE en el estándar SQL. Las bases de datos son equivalentes a los catálogos, cuya creación está definida por la implementación.

Consulte también

ALTER DATABASE, DROP DATABASE