Estou trabalhando com um banco de dados PostgreSQL e preciso alterar a configuração de agrupamento de colunas de texto específicas. No entanto, não quero alterar o agrupamento de todo o banco de dados.
Atualmente, o banco de dados possui indexação que não diferencia maiúsculas de minúsculas em colunas inteiras (especificamente em colunas de ID) e não há índices nas colunas de texto que desejo modificar. Presumo que alterar a ordenação apenas das colunas de texto não deva causar problemas, visto que não há índices nessas colunas.
Minha pergunta é: alterar a ordenação nas colunas de texto causará algum problema com dados ou consultas existentes, mesmo que a ordenação do banco de dados não seja alterada e nenhum índice seja afetado?
Há alguma consideração de desempenho ou possíveis problemas dos quais eu deva estar ciente neste cenário?
A ordenação atual do banco de dados está definida como Turkish_Turkey.1254, conforme mostrado por esta consulta:
SELECT datname, datcollate, datctype
FROM pg_database
WHERE datname = '';
Para alterar a ordenação de todas as colunas de tipo de texto no banco de dados para uma ordenação que não diferencia maiúsculas de minúsculas, estou executando o seguinte bloco PL/pgSQL:
DO $$
DECLARE
t record;
BEGIN
FOR t IN
SELECT table_schema, table_name, column_name
FROM information_schema.columns
WHERE table_catalog = ''
AND data_type = 'text'
AND table_schema NOT LIKE 'pg_%'
ORDER BY table_schema
LOOP
EXECUTE format('ALTER TABLE %I.%I ALTER COLUMN %I SET DATA TYPE text COLLATE "tr-x-icu"',
t.table_schema, t.table_name, t.column_name);
END LOOP;
END
$$;
Não há problema em alterar a ordenação de uma coluna. Se houvesse índices na coluna, os índices seriam reconstruídos.
Os possíveis efeitos colaterais são:
Isso pode alterar os resultados da sua consulta, mas provavelmente é exatamente por isso que você deseja alterar a ordenação em primeiro lugar.
Como diferentes comparações não são igualmente rápidas, também pode haver impacto no desempenho.
Se você mudar para uma ordenação não determinística (por exemplo, uma que não diferencia maiúsculas de minúsculas),
LIKE
não funcionará mais para versões do PostgreSQL anteriores à v18.Expressões regulares não são suportadas em strings com uma ordenação não determinística.
Fora isso, não tenho conhecimento de nenhum problema potencial.