CREATE COLLATION — define uma nova ordenação
CREATE COLLATION [ IF NOT EXISTS ]nome( [ LOCALE =localidade, ] [ LC_COLLATE =lc_collate, ] [ LC_CTYPE =lc_ctype, ] [ PROVIDER =provedor, ] [ DETERMINISTIC =booleano, ] [ RULES =regras, ] [ VERSION =versão] ) CREATE COLLATION [ IF NOT EXISTS ]nomeFROMordenação_existente
O comando CREATE COLLATION define uma nova
ordenação usando as configurações de localidade do sistema operacional,
ou copiando uma ordenação existente.
Para poder criar uma ordenação, deve-se ter o privilégio
CREATE no esquema de destino.
IF NOT EXISTSNão lança erro se já existir uma ordenação com o mesmo nome. É emitido um aviso neste caso. Note não haver garantia de que a ordenação existente tenha semelhança com aquela a ser criada.
nomeO nome da ordenação, que pode ser qualificado pelo esquema. Se não for, a ordenação é definida no esquema corrente. O nome da ordenação deve ser único dentro desse esquema. (Os catálogos do sistema podem conter ordenações com o mesmo nome para outras codificações, mas serão ignoradas se a codificação do banco de dados não corresponder.)
localidadeO nome da localidade para esta ordenação. Veja Seção 23.2.2.3.1 e Seção 23.2.2.3.2 para obter detalhes.
Se o provedor for a libc,
este é um atalho para configurar LC_COLLATE e
LC_CTYPE de uma só vez. Se for especificada a
localidade, não poderá ser
especificado nenhum desses parâmetros.
Se o provedor for builtin,
então a localidade deverá ser
especificada e definida como C,
C.UTF-8 ou PG_UNICODE_FAST.
lc_collate
Se o provedor for a libc,
deverá ser usada a localidade do sistema operacional especificada
para a categoria de localidade LC_COLLATE.
lc_ctype
Se o provedor for a libc,
deverá ser usada a localidade do sistema operacional especificada
para a categoria de localidade LC_CTYPE.
provedor
Especifica o provedor a ser usado para os serviços de localidade
associados a esta ordenação.
Os valores possíveis são builtin,
icu
(se o servidor foi construído com suporte a ICU)
ou libc.
libc é o padrão.
Veja Provedores de localidade para obter detalhes.
DETERMINISTIC
Especifica se a ordenação deve usar comparações determinísticas.
O padrão é verdade.
Uma comparação determinística considera cadeias de caracteres
que não são iguais em termos de byte como diferentes, mesmo que
sejam consideradas logicamente iguais pela comparação.
O PostgreSQL resolve os empates usando
uma comparação byte a byte (byte-wise).
A comparação que não é determinística pode fazer com que a
ordenação seja, digamos, sem distinção entre letras maiúsculas e
minúsculas ou acentuadas.
Para isto, é necessário escolher uma configuração
LOCALE apropriada, e
definir a ordenação como não determinística aqui.
As ordenações não determinísticas têm suporte apenas com o provedor ICU.
regrasEspecifica regras de ordenação adicionais para personalizar o comportamento da ordenação. Só há suporte para ICU. Veja Seção 23.2.3.4 para obter detalhes.
versão
Especifica a cadeia de caracteres de versão a ser armazenada
com a ordenação.
Normalmente, este parâmetro deve ser omitido, o que fará com que
a versão seja calculada a partir da versão real da ordenação
fornecida pelo sistema operacional.
Esta opção deve ser usada por pg_upgrade
para copiar a versão de uma instalação existente.
Consulte também ALTER COLLATION para saber como lidar com incompatibilidades de versões de ordenação.
ordenação_existenteO nome da ordenação existente a ser copiada. A nova ordenação terá as mesmas propriedades da existente, mas será um objeto independente.
O comando CREATE COLLATION produz um bloqueio
SHARE ROW EXCLUSIVE, que é autoconflitante,
no catálogo do sistema pg_collation,
portanto, só pode ser executado um comando
CREATE COLLATION por vez.
Deve ser usado o comando DROP COLLATION para
remover as ordenações definidas pelo usuário.
Veja Seção 23.2.2.3 para obter mais informações sobre como criar ordenações. [117]
Ao usar o provedor de ordenação libc, a localidade
deve ser aplicável à codificação do banco de dados corrente.
Veja CREATE DATABASE para obter regras mais
precisas.
Para criar uma ordenação a partir da localidade do sistema operacional
fr_FR.utf8 (assumindo que a codificação corrente
do banco de dados é UTF8):
CREATE COLLATION french (locale = 'fr_FR.utf8');
Para criar uma ordenação usando o provedor ICU e a ordem de classificação do catálogo telefônico alemão:
CREATE COLLATION german_phonebook (provider = icu, locale = 'de-u-co-phonebk');
Para criar uma ordenação usando o provedor ICU, com base na localidade raiz do ICU, com regras personalizadas:
CREATE COLLATION custom (provider = icu, locale = 'und', rules = '&V << w <<< W');
Veja Seção 23.2.3.4 para obter mais detalhes e exemplos sobre a sintaxe das regras.
Para criar uma ordenação a partir de uma ordenação existente:
CREATE COLLATION german FROM "de_DE";
Isto pode ser conveniente para poder usar nomes de ordenação independentes do sistema operacional em aplicações.
Existe o comando CREATE COLLATION no padrão
SQL, mas é limitado a copiar uma ordenação existente.
A sintaxe para definir uma nova ordenação é uma extensão do
PostgreSQL.