Por que eu não posso fazer um “superior ()” no meu banco de dados PostgreSQL?

StackOverflow https://stackoverflow.com/questions/454769

  •  19-08-2019
  •  | 
  •  

Pergunta

Eu criei um banco de dados PostgreSQL com "codificação 'UTF-8' =", e carregado alguns dados UTF8 nele. A seleção funciona bem, mas quando eu tento fazer um "ONDE UPPER (nome) = 'FOO'" em uma consulta, eu recebo um erro

ERROR:  invalid multibyte character for locale

A minha pesquisa parece indicar que isso é porque a instalação do PostgreSQL foi "initdb" -ed com LANG=en_US em vez de LANG=en_US.UTF8. Fazendo um "SHOW LC_COLLATE" mostra "en_US". Eu não quero ter que despejar e recriar todos os meus bancos de dados, pois vários deles são PostGIS e é uma dor real para recriar aqueles. Existe uma solução alternativa, como uma maneira de fazer o equivalente a "UPPER" que funciona para UTF8?

Atualizar eu acabei fazendo o despejo, reinitdb, e restauração de banco de dados, e foi menos dolorosa do que eu pensava que seria, com exceção de um pouco de um problema descobrir onde os dados deveria ir porque o usuário postgres não define a variável de ambiente PGDATA, e nem qualquer arquivo de configuração ou shell script que eu poderia encontrar.

Foi útil?

Solução

Eu não acho que a solução que você quer é viável, mas dump e restaurar os bancos de dados PostGIS-habilitado deve funcionar bem. Eu regularmente dump e restaurar bancos de dados com as funções de PostGIS e dados com objetos geom.

Que tipo de problemas você tem?

Outras dicas

Você diagnóstico é certo, é um problema comum com Unicode em PostgreSQL. O procedimento de instalação tentou ser esperto e initdbed com a localidade do shell de executá-lo: - (

Eu sugiro que, se você não pode despejar e restaurar seu banco de dados, você tem um problema mais grave e mais urgente que maiúscula de dados. IMHO, você deve abordar este problema em primeiro lugar, antes que você realmente tem que restaurar os dados depois foi emitida uma nova versão do PostgreSQL (ou após uma falha de disco rígido).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top