SELECT *
viene ampliato al momento dell'esecuzione, proprio come con tutte le operazioni simili (CREATE VIEW
, CREATE TABLE AS
)
La parola chiave è "rilegatura anticipata" in contrapposizione a "rilegatura tardiva". Postgres salva l'elenco delle colonne presenti al momento dell'esecuzione di SELECT *
, le colonne aggiunte in seguito non incluso automaticamente. La stringa di query stesso non viene salvato, solo la rappresentazione interna dopo espandendo SELECT *
e altre cose come la risoluzione di tutti gli identificatori.
REFRESH MATERIALIZED VIEW
mai cambia la definizione dei dati, solo i dati:
Il manuale potrebbe essere più esplicito al riguardo, ma il confronto con il comportamento di CREATE TABLE AS
me lo ha chiarito: