Existe uma maneira de forçar todos os dados de texto para maiúsculas sem recorrer a escrever uma função para cada tabela ou fazê-lo no lado do cliente?
relate perguntas
-
Posso ativar o PITR depois que o banco de dados foi usado
-
Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo
-
Os procedimentos armazenados impedem a injeção de SQL?
-
Sequências Biológicas do UniProt no PostgreSQL
-
Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?
Forçar valores corretos é uma coisa. Uma restrição
simples por coluna pode fazer o trabalho de forma confiável:
CHECK
A correção automática de todas as entradas é outra coisa, e não tão simples.
Isso pode ser feito com um gatilho usando uma função de gatilho que procura nomes de colunas e tipos de dados no catálogo do sistema dinamicamente e converte todos os dados de caracteres em letras maiúsculas. Seguro o suficiente, mas não tão rápido e à prova de balas. E os gatilhos podem ser contornados ou neutralizados por outros gatilhos.
Uma função de gatilho genérica para todos:
Um gatilho por tabela :
No Postgres 11 ou posterior, use a sintaxe mais sensata:
Converte todos os valores em colunas com um tipo de dados de caractere conforme definido em
_typ
maiúsculas.Testado em Postgres 9.4.
Relacionado:
SQL-99 DOMAIN pode ser uma boa solução para este problema.
Crie um domínio no PostgreSQL com uma restrição para o requisito de letras maiúsculas e outros requisitos:
Em seguida, defina as colunas usando seu domínio quando necessário:
O banco de dados, sem muito esforço, aplicará letras maiúsculas para essas colunas. Mas, no caso acima, deve-se lembrar que o índice UNIQUE, e a coluna em geral, contém apenas dados maiúsculos. Portanto, é responsabilidade do aplicativo colocar em letras maiúsculas todos os dados de comparação usados para corresponder. Por exemplo, o seguinte pode fazer com que seu futuro eu, ou seus sucessores, se perguntem por que os produtos permanecem depois de excluí-los:
Em vez disso, você precisará fazer:
ou crie uma API de banco de dados (função, procedimento, gatilho, etc.) para lidar com letras maiúsculas. Além disso, todas as inserções falharão, a menos que os dados sejam transformados em letras maiúsculas antes.
Peço desculpas pela demora na resposta, pois sou muito novo neste site.
Gostei das respostas acima. No entanto, usei uma maneira simples e suja, pois tenho menos tabelas e apenas algumas colunas necessárias em letras maiúsculas que são usadas para exibição para usuários finais.
Geralmente, você precisa de MAIÚSCULAS para exibir os dados para o usuário final. Se for assim,
PASSO 1: identifique as tabelas e colunas e use o SQL abaixo (isto é para POSTGRES):
PASSO 2: Automatize o(s) script(s) acima usando CRONJOB ou similar (pode ser a cada 30 minutos ou 1 hora ou mesmo a cada minuto)
aliás, as restrições TRIGGERS (para atualizações) CHECK (para forçar) podem ser as melhores soluções para TEMPO REAL, conforme explicado por outros amigos acima, mas você precisa defini-las para cada coluna.