O PostgreSQL suporta colunas geradas ? Também conhecido como colunas virtuais . Eu não estou falando de IDENTITY
colunas .
Não consigo encontrar nenhuma informação sobre esse recurso notável, mas sei que ele está disponível no SQL Server e nas versões mais recentes do MariaDB e MySQL.
O recurso é mencionado no padrão SQL: 2003 e houve alguma discussão nos fóruns do PostgreSQL por volta de 2006, mas não consigo encontrar nada substancial sobre o assunto.
Há alguma discussão sobre SO, mas ela é bastante antiga agora, portanto pode estar desatualizada.
postgresql
computed-column
Manngo
fonte
fonte
Respostas:
Não tenho certeza se é isso que você deseja, mas a notação de atributo
row.full_name
e a funçãofull_name(row)
são equivalentes no postgresql.Isso significa que você toma uma mesa
e uma função:
e chame assim:
É aquilo que você precisa?
Para acelerar as coisas, você pode criar um índice de expressão:
Ou armazene tudo em uma exibição materializada.
Exemplo retirado daqui: http://bernardoamc.github.io/sql/2015/05/11/postgres-virtual-columns/
fonte
select people.full_name from people
ouselect full_name(people) from people
?Não, atualmente não é suportado (no Postgres 9.6).
A única solução alternativa é usar um gatilho ou uma exibição se for um cálculo simples que você não precisa indexar.
fonte
Sim:
GENERATED ALWAYS AS … STORED
O Postgres 12 adiciona a funcionalidade para colunas geradas, conforme mencionado no padrão SQL: 2003 .
O valor é gerado no momento de um
INSERT
ouUPDATE
, em seguida, armazenado com a linha como qualquer outro valor.Um gerado deve ser baseado em uma coluna base da mesma tabela ou em uma função imutável .
A sintaxe é simples, uma cláusula sobre
CREATE TABLE
:Exemplo:
Recursos:
Ressalvas:
Vejo:
fonte
Dependendo do seu caso de uso, você pode obter esse tipo de comportamento declarando uma nova coluna e preenchendo-a com um gatilho na inserção / atualização.
Eu usaria as respostas acima, se possível, para evitar a duplicação de dados que poderiam ser derivados do que você já tem, mas ele faz o truque e pode ser útil para campos derivados computacionalmente intensos que você deseja calcular uma vez e salvar.
Eu considerei essa abordagem para lidar com um problema em que às vezes tinha apenas 15 dígitos de uma chave de 18 dígitos (os últimos 3 dígitos são apenas uma soma de verificação), mas queria poder impor um relacionamento de chave estrangeira.
Documentos PG sobre gatilhos: https://www.postgresql.org/docs/9.6/sql-createtrigger.html
Exemplo W3: https://www.w3resource.com/PostgreSQL/postgresql-triggers.php
fonte