CREATE COLLATION

CREATE COLLATION — define uma nova ordenação

Sinopse

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 ] nome FROM ordenação_existente

Descrição

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.

Parâmetros

IF NOT EXISTS

Nã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.

nome

O 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.)

localidade

O 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.

regras

Especifica 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_existente

O nome da ordenação existente a ser copiada. A nova ordenação terá as mesmas propriedades da existente, mas será um objeto independente.

Notas

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.

Exemplos

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.

Conformidade

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.

Veja também

ALTER COLLATION, DROP COLLATION