Eu tenho um banco de dados Postgresql 8.1. Em uma mesa, há três colunas: first_name
, last_name
, display_name
.
É possível definir o valor padrão de display_name
ser first_name + " " + last_name
?
postgresql
MattSayar
fonte
fonte
Respostas:
Use um gatilho.
Aqui está um código que você pode usar como base. Se você também precisar lidar com UPDATEs, apenas uma pequena alteração será necessária.
fonte
CREATE TRIGGER people_insert BEFORE INSERT OR UPDATE...
com a atualização também?Você não precisa realmente armazenar o valor; você pode criar uma função que pode ser referenciada como uma coluna gerada. A única ressalva é que as referências sempre devem ser qualificadas com o nome da tabela ou do alias.
Os resultados:
Você pode até indexar o valor gerado, incluindo o uso de pesquisas KNN com base na similaridade do trigrama. Por exemplo:
Esse tipo de pesquisa retorna linhas da varredura de índice na ordem "distância" da sequência de pesquisa. Se você quiser ver o quão "próximos" eles estavam, você poderia usar o operador de distância (
<->
) ou asimilarity()
função (que é 1 - distância). Uma pesquisa KNN pode retornar o K "vizinhos mais próximos" muito rapidamente, mesmo com um conjunto de dados muito grande.fonte
last_name
estarNOT NULL
no meu exemplo. :-) Tivemos colunas de nome como as que estavam na tabela e mantidas por gatilhos e mudamos para essa abordagem sem muita dificuldade, mas nossa estrutura sempre usa um alias e sempre qualifica referências, de modo que essa parte foi fácil. Se você tiver um código que não seja consistente sobre a qualificação de referências de coluna, posso ver onde pode ser difícil rastrear todos esses casos.Com a configuração PADRÃO em uma tabela de colunas, não.
Sua melhor aposta aqui é uma TRIGGER com o novo valor para cada coluna que você deseja calcular.
fonte