SELECT *
jest rozwijany w czasie wykonywania, tak jak w przypadku wszystkich podobnych operacji (CREATE VIEW
, CREATE TABLE AS
)
Kluczowym słowem jest „wczesne wiązanie” w przeciwieństwie do „późnego wiązania”. Postgres zapisuje listę kolumn obecnych w czasie wykonywania SELECT *
, kolumny dodane później nie dołączane automatycznie. ciąg zapytania sam nie jest zapisywany, tylko wewnętrzna reprezentacja po rozwijanie SELECT *
i inne rzeczy, takie jak rozwiązywanie wszystkich identyfikatorów.
REFRESH MATERIALIZED VIEW
nigdy zmienia definicję danych, tylko dane:
Podręcznik mógłby być bardziej jednoznaczny, ale porównanie z zachowaniem z CREATE TABLE AS
wyjaśnił mi to: