CREATE DATABASE — define um novo banco de dados
CREATE DATABASEnome[ 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]
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 .
Em particular, escrevendo nomeTEMPLATE 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.
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.
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.
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.
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.
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.
[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.)