SELECT *
se expande en el momento de la ejecución, al igual que con todas las operaciones similares (CREATE VIEW
, CREATE TABLE AS
)
La palabra clave es "enlace temprano" en oposición a "enlace tardío". Postgres guarda la lista de columnas presentes en el momento de la ejecución de SELECT *
, las columnas añadidas más tarde no incluido automáticamente. La cadena de consulta en sí no se guarda, solo la representación interna después expandiendo SELECT *
y otras cosas como resolver todos los identificadores.
REFRESH MATERIALIZED VIEW
nunca cambia la definición de datos, solo datos:
El manual podría ser más explícito al respecto, pero la comparación con el comportamiento de CREATE TABLE AS
me lo dejó claro: