PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Kolumny obliczane / obliczane / wirtualne / pochodne w PostgreSQL

Do Postgres 11 wygenerowanych kolumn nie są obsługiwane - zgodnie z definicją w standardzie SQL i zaimplementowane przez niektóre RDBMS, w tym DB2, MySQL i Oracle. Ani podobnych "kolumn obliczanych" SQL Server.

STORED wygenerowane kolumny są wprowadzane w Postgres 12 . Trywialny przykład:

CREATE TABLE tbl (
  int1    int
, int2    int
, product bigint GENERATED ALWAYS AS (int1 * int2) STORED
);

db<>graj tutaj

VIRTUAL wygenerowane kolumny mogą pochodzić z jednej z kolejnych iteracji. (Jeszcze nie w Postgres 14).

Powiązane:

  • Zapis atrybutów dla wywołania funkcji daje błąd

Do tego czasu , możesz emulować VIRTUAL wygenerowane kolumny z funkcją za pomocą notacji atrybutów (tbl.col ), która wygląda i działa jak wirtualnie wygenerowana kolumna . To trochę dziwna składnia, która istnieje w Postgresie z powodów historycznych i pasuje do przypadku. Ta powiązana odpowiedź zawiera przykłady kodu :

  • Zapisać wspólne zapytanie jako kolumnę?

Wyrażenie (wyglądające jak kolumna) nie jest zawarte w SELECT * FROM tbl , chociaż. Zawsze musisz to wyraźnie wymienić.

Może być również obsługiwany z pasującym indeksem wyrażeń - pod warunkiem, że funkcja jest IMMUTABLE . Na przykład:

CREATE FUNCTION col(tbl) ... AS ...  -- your computed expression here
CREATE INDEX ON tbl(col(tbl));

Alternatywne

Alternatywnie możesz zaimplementować podobną funkcjonalność za pomocą VIEW , opcjonalnie w połączeniu z indeksami wyrażeń. Następnie SELECT * może zawierać wygenerowaną kolumnę.

„Utrwalony” (STORED ) kolumny wyliczane mogą być implementowane z wyzwalaczami w funkcjonalnie identyczny sposób.

Widoki zmaterializowane są ściśle powiązaną koncepcją, zaimplementowaną od wersji Postgres 9.3.
We wcześniejszych wersjach można zarządzać MV ręcznie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rekordy oparte na kursorach w PostgreSQL

  2. Przełączanie awaryjne replikacji PostgreSQL 101

  3. Przegląd kompilacji Just-in-Time (JIT) dla PostgreSQL

  4. JPA Nazwy tabel pisane wielkimi literami

  5. Jak tymczasowo wyłączyć wyzwalacze w PostgreSQL?