CREATE DATABASE — crear una nueva base de datos
CREATE DATABASEname[ 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]
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 .
En particular, al escribir nameTEMPLATE 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.
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.
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.
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).
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.
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.