SELECT *
est développé au moment de l'exécution, comme pour toutes les opérations similaires (CREATE VIEW
, CREATE TABLE AS
)
Le mot clé est « consolidation anticipée » par opposition à « consolidation tardive ». Postgres enregistre la liste des colonnes présentes au moment de l'exécution de SELECT *
, les colonnes ajoutées ultérieurement ne le sont pas inclus automatiquement. La chaîne de requête elle-même n'est pas enregistrée, seule la représentation interne après développer SELECT *
et d'autres choses comme la résolution de tous les identifiants.
REFRESH MATERIALIZED VIEW
jamais modifie la définition des données, uniquement les données :
Le manuel pourrait être plus explicite à ce sujet, mais la comparaison avec le comportement de CREATE TABLE AS
m'a fait comprendre :