PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Colunas computadas/calculadas/virtuais/derivadas no PostgreSQL


Até 11 colunas geradas do Postgres não são suportados - conforme definido no padrão SQL e implementado por alguns RDBMS, incluindo DB2, MySQL e Oracle. Nem as "colunas calculadas" semelhantes do SQL Server.

STORED colunas geradas são introduzidas com Postgres 12 . Exemplo trivial:
CREATE TABLE tbl (
  int1    int
, int2    int
, product bigint GENERATED ALWAYS AS (int1 * int2) STORED
);

db<>mexa aqui

VIRTUAL colunas geradas podem vir com uma das próximas iterações. (Não no Postgres 14, ainda).

Relacionado:
  • Notação de atributo para chamada de função dá erro

Até então , você pode emular VIRTUAL colunas geradas com uma função usando notação de atributo (tbl.col ) que parece e funciona muito como uma coluna gerada virtual . Isso é um pouco estranho de sintaxe que existe no Postgres por razões históricas e se encaixa no caso. Esta resposta relacionada tem exemplos de código :
  • Armazenar consulta comum como coluna?

A expressão (parecida com uma coluna) não está incluída em um SELECT * FROM tbl , no entanto. Você sempre tem que listá-lo explicitamente.

Também pode ser suportado com um índice de expressão correspondente - desde que a função seja IMMUTABLE . Como:
CREATE FUNCTION col(tbl) ... AS ...  -- your computed expression here
CREATE INDEX ON tbl(col(tbl));

Alternativas


Como alternativa, você pode implementar uma funcionalidade semelhante com um VIEW , opcionalmente acoplado a índices de expressão. Então SELECT * pode incluir a coluna gerada.

"Persistente" (STORED ) colunas computadas podem ser implementadas com gatilhos de maneira funcionalmente idêntica.

As visualizações materializadas são um conceito intimamente relacionado, implementado desde o Postgres 9.3.
Nas versões anteriores é possível gerenciar MVs manualmente.