CREATE DATABASE

CREATE DATABASE — define um novo banco de dados

Sinopse

CREATE DATABASE nome
    [ WITH ] [ OWNER [=] nome_do_usuário ]
           [ TEMPLATE [=] modelo ]
           [ ENCODING [=] codificação ]
           [ STRATEGY [=] estratégia ]
           [ LOCALE [=] localidade ]
           [ LC_COLLATE [=] lc_collate ]
           [ LC_CTYPE [=] lc_ctype ]
           [ BUILTIN_LOCALE [=] localidade_integrada ]
           [ ICU_LOCALE [=] localidade_icu ]
           [ ICU_RULES [=] regras_icu ]
           [ LOCALE_PROVIDER [=] provedor_de_localidade ]
           [ COLLATION_VERSION = versão_da_ordenação ]
           [ TABLESPACE [=] nome_do_espaço_de_tabelas ]
           [ ALLOW_CONNECTIONS [=] permite_conexões ]
           [ CONNECTION LIMIT [=] limite_de_conexões ]
           [ IS_TEMPLATE [=] é_modelo ]
           [ OID [=] oid ]

Descrição

O comando CREATE DATABASE define um novo banco de dados do PostgreSQL.

Para criar um banco de dados, é necessário ser um superusuário, ou ter o privilégio especial CREATEDB. Veja CREATE ROLE.

Por padrão, o novo banco de dados será criado clonando o banco de dados padrão do sistema template1. Pode ser especificado um modelo diferente escrevendo TEMPLATE nome. Em particular, escrevendo TEMPLATE template0 é possível criar um banco de dados intocado (aquele onde não existem objetos definidos pelo usuário, e onde os objetos do sistema não foram alterados), contendo apenas os objetos padrão predefinidos pela versão do PostgreSQL em uso. É útil para evitar copiar quaisquer objetos locais da instalação que possam ter sido adicionados ao template1.

Parâmetros

nome #

O nome do banco de dados a ser criado.

nome_do_usuário #

O nome da função de banco de dados (role) do usuário que será o dono do novo banco de dados, ou DEFAULT para usar o padrão (ou seja, o usuário que está executando o comando). Para criar um banco de dados pertencente a outra função de banco de dados, é necessário ser capaz de executar o comando SET ROLE para a função de banco de dados (role) que será a dona,

modelo #

O nome do modelo a partir do qual será criado o novo banco de dados, ou DEFAULT para usar o modelo padrão (template1).

codificação #

A codificação do conjunto de caracteres a ser usada no novo banco de dados. Deve ser especificada uma constante cadeia de caracteres (por exemplo, 'SQL_ASCII'), ou o número inteiro da codificação, ou DEFAULT para usar a codificação padrão (ou seja, a codificação do banco de dados modelo). Os conjuntos de caracteres com suporte pelo servidor PostgreSQL são descritos na Conjuntos de caracteres com suporte. Veja abaixo as restrições adicionais.

estratégia #

Estratégia a ser utilizada na criação do novo banco de dados. Se for usada a estratégia WAL_LOG, o banco de dados será copiado bloco por bloco e cada bloco será escrito separadamente no registro de escrita antecipada (WAL). Esta é a estratégia mais eficiente nos casos em que o banco de dados modelo é pequeno e, portanto, é a padrão. A estratégia mais antiga, FILE_COPY, também está disponível. Esta estratégia escreve um pequeno registro no WAL para cada espaço de tabelas usado pelo banco de dados de destino. Cada registro desse tipo representa a cópia de um diretório inteiro para um novo local no nível do sistema de arquivos. Embora isto reduza substancialmente o volume do WAL, especialmente se o banco de dados modelo for grande, também força o sistema a executar um ponto de verificação antes e depois da criação do novo banco de dados. Em algumas situações, isto pode ter um impacto negativo considerável no desempenho geral do sistema. A estratégia FILE_COPY é afetada pela configuração de file_copy_method.

localidade #

Define a ordenação e a classificação de caracteres padrão no novo banco de dados. A ordenação afeta a ordem de classificação aplicada às cadeias de caracteres, por exemplo, em consultas com ORDER BY, bem como a ordem utilizada nos índices das colunas de texto. A classificação de caracteres afeta a categorização de caracteres, por exemplo, letra minúscula, maiúscula e dígito. Também define os aspectos associados ao ambiente do sistema operacional LC_COLLATE e LC_CTYPE. A configuração padrão é a mesma do banco de dados modelo. Veja Seção 23.2.2.3.1 e a Seção 23.2.2.3.2 para obter detalhes.

Pode ser alterada individualmente pelas configurações lc_collate, lc_ctype, localidade_integrada ou localidade_icu.

Se provedor_de_localidade for builtin, então deverá ser especificada a localidade ou a localidade_integrada, e definida como C, C.UTF-8 ou PG_UNICODE_FAST.

Dica

As outras configurações de localidade lc_messages, lc_monetary, lc_numeric e lc_time não são fixadas por banco de dados e não são definidas por este comando. Se for desejado torná-las padrão para um banco de dados específico, poderá ser usado o comando ALTER DATABASE ... SET.

lc_collate #

Define LC_COLLATE no ambiente do sistema operacional do servidor de banco de dados. [118] O valor padrão será a configuração de localidade, se esta for especificada; caso contrário será a mesma configuração do banco de dados modelo. Veja abaixo as restrições adicionais.

Se o provedor_de_localidade for a libc, também será definida a ordenação padrão a ser usada no novo banco de dados, substituindo a configuração de localidade.

lc_ctype #

Define LC_CTYPE no ambiente do sistema operacional do servidor de banco de dados. [119] O valor padrão será a configuração de localidade, se esta for especificada; caso contrário será a mesma configuração do banco de dados modelo. Veja abaixo as restrições adicionais.

Se o provedor_de_localidade for a libc, também será definida a classificação de caracteres padrão a ser usada no novo banco de dados, substituindo a configuração de localidade.

localidade_integrada #

Especifica a localidade do provedor integrado para a ordenação e a classificação de caracteres padrão do banco de dados, substituindo a configuração de localidade. O provedor_de_localidade deve ser builtin. O valor padrão é a configuração de localidade, se esta for especificada; caso contrário, será a mesma configuração do banco de dados modelo.

As localidades disponíveis para o provedor builtin são C, C.UTF-8 e PG_UNICODE_FAST.

localidade_icu #

Especifica a localidade ICU (International Components for Unicode) (veja Seção 23.2.2.3.2) para a ordenação e classificação de caracteres padrão do banco de dados, substituindo a configuração de localidade. O provedor_de_localidade deve ser ICU. O valor padrão é a configuração de localidade, se esta for especificada; caso contrário, será a mesma configuração do banco de dados modelo.

regras_icu #

Especifica regras de ordenação adicionais para personalizar o comportamento da ordenação padrão deste banco de dados. Tem suporte apenas para ICU. Veja Seção 23.2.3.4 para obter detalhes.

provedor_de_localidade #

Especifica o provedor a ser usado para a ordenação padrão neste banco de dados. Os valores possíveis são builtin, icu (se o servidor foi construído com suporte a ICU) ou libc. Por padrão, o provedor é o mesmo que o do modelo. Veja Provedores de localidade para obter detalhes.

versão_da_ordenação #

Especifica a cadeia de caracteres da versão de ordenação a ser armazenada no banco de dados. Normalmente, isto deve ser omitido, o que fará com que a versão seja obtida a partir da versão corrente da ordenação do banco de dados, conforme fornecida pelo sistema operacional. Esta opção destina-se a ser usada pelo comando pg_upgrade para copiar a versão de uma instalação existente.

Veja também ALTER DATABASE para saber como lidar com incompatibilidades de versão de ordenação do banco de dados.

nome_do_espaço_de_tabelas #

O nome do espaço de tabelas que será associado ao novo banco de dados, ou DEFAULT para usar o espaço de tabelas do banco de dados modelo. Este espaço de tabelas será o espaço de tabelas padrão usado para objetos criados neste banco de dados. Veja CREATE TABLESPACE para obter mais informações.

permite_conexões #

Se for falso, não será possível se conectar a este banco de dados. O padrão é ser verdade, permitindo conexões (exceto conforme restringido por outros mecanismos, como GRANT/REVOKE CONNECT).

limite_de_conexões #

Quantas conexões simultâneas podem ser feitas a este banco de dados. -1 (o padrão) significa sem limite.

é_modelo #

Se for verdade, então este banco de dados pode ser clonado por qualquer usuário com o privilégio CREATEDB; se for falso (o padrão), somente os superusuários, ou o dono do banco de dados, podem cloná-lo.

oid #

O identificador de objeto a ser usado para o novo banco de dados. Se este parâmetro não for especificado, o PostgreSQL escolherá automaticamente um OID adequado. Este parâmetro destina-se principalmente ao uso interno de pg_upgrade, e somente pg_upgrade pode especificar um valor menor que 16384.

Os parâmetros opcionais podem ser escritos em qualquer ordem, e não apenas na ordem mostrada acima.

Notas

O comando CREATE DATABASE não pode ser executado dentro de um bloco de transação.

Erros como não foi possível inicializar o diretório do banco de dados, estão provavelmente relacionados a permissões insuficientes no diretório de dados, disco cheio, ou outros problemas no sistema de arquivos.

Deve ser usado o comando DROP DATABASE para remover um banco de dados.

O programa createdb é um programa empacotador em torno desse comando, fornecido por conveniência.

Parâmetros de configuração no nível do banco de dados (definidos por meio de ALTER DATABASE), e permissões no nível de banco de dados (definidas por meio de GRANT), não são copiados do banco de dados modelo.

Embora seja possível clonar um banco de dados diferente de template1 especificando seu nome como modelo, este comando não foi (ainda) planejado como uma ferramenta de COPY DATABASE de propósito geral. A principal limitação é que nenhuma outra sessão pode estar conectada ao banco de dados modelo enquanto este está sendo clonado. O comando CREATE DATABASE irá falhar se alguma outra conexão existir quando este iniciar; caso contrário, as novas conexões com o banco de dados modelo serão bloqueadas até que CREATE DATABASE termine. Veja Bancos de dados modelo para obter mais informações.

A codificação do conjunto de caracteres especificada para o novo banco de dados deve ser compatível com as configurações de localidade escolhidas (LC_COLLATE e LC_CTYPE). Se a localidade for C (ou a equivalente POSIX), todas as codificações serão permitidas, mas para outras configurações de localidade, há apenas uma codificação que funcionará corretamente. (No Windows, entretanto, a codificação UTF-8 pode ser usada com qualquer localidade.) O comando CREATE DATABASE permite que os superusuários especifiquem a codificação SQL_ASCII independentemente das configurações de localidade, mas esta opção é obsoleta, podendo resultar em mau comportamento de funções de cadeias de caracteres, se dados que não são compatíveis com codificação da localidade forem armazenados no banco de dados.

As configurações de codificação e localidade devem corresponder àquelas do banco de dados modelo, exceto quando template0 é usado como modelo. Isto ocorre porque outros bancos de dados podem conter dados que não correspondam à codificação especificada, ou podem conter índices cuja ordem de classificação é afetada por LC_COLLATE e LC_CTYPE. A cópia desses dados resultaria em um banco de dados corrompido segundo as novas configurações. Entretanto, template0 é conhecido por não conter nenhum dado ou índice que possa ser afetado.

Neste momento não existe opção para usar uma localidade de banco de dados com comparações não determinísticas. (veja CREATE COLLATION para obter uma explicação). Caso isto seja necessário, será preciso usar agrupamentos por coluna.

A opção CONNECTION LIMIT é aplicada apenas aproximadamente; se duas novas sessões começarem aproximadamente ao mesmo tempo, quando existe apenas um encaixe de conexão para o banco de dados, é possível que as duas falhem. Além disso, o limite não é aplicado para superusuários ou processos trabalhadores em segundo plano.

Exemplos

Para definir um novo banco de dados:

CREATE DATABASE lusiadas;

Para criar o banco de dados sales, pertencente ao usuário salesapp, com o espaço de tabelas padrão salesspace:

CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;

Para criar o banco de dados music com uma localidade diferente:

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

Neste exemplo, a cláusula TEMPLATE template0 é necessária se a localidade especificada for diferente daquela em template1. (Se não for, especificar a localidade explicitamente é redundante.)

Para criar o banco de dados music2 com uma localidade diferente, e uma codificação de conjunto de caracteres diferente:

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

A localidade especificada e as configurações de codificação devem corresponder, ou será relatado um erro.

Note que os nomes de localidade são específicos do sistema operacional, portanto, os comandos acima podem não funcionar da mesma maneira em todos os sistemas.

Conformidade

Não existe o comando CREATE DATABASE no padrão SQL. Os bancos de dados são equivalentes a catálogos, cuja criação é definida pela implementação.

Veja também

ALTER DATABASE, DROP DATABASE


[118] A categoria LC_COLLATE define informações de ordenação de caractere ou cadeia. de caracteres. Um elemento de ordenação é a unidade de comparação para ordenação. Um elemento de ordenação pode ser um caractere ou uma sequência de caracteres. Cada elemento de ordenação na localidade tem um conjunto de pesos, que determinam se o elemento de ordenação é ordenado antes, igual ou depois dos outros elementos de ordenação na localidade. IBM i 7.6.0 - LC_COLLATE category (N. T.)

[119] A categoria LC_CTYPE define classificação de caracteres, conversão de maiúsculas e minúsculas e outros atributos de caracteres. IBM i 7.6.0 - LC_CTYPE category (N. T.)