SELECT *
wird zur Ausführungszeit erweitert, genau wie bei allen ähnlichen Operationen (CREATE VIEW
, CREATE TABLE AS
)
Das Schlüsselwort ist "Early Binding" im Gegensatz zu "Late Binding". Postgres speichert die Liste der Spalten, die zum Zeitpunkt der Ausführung von SELECT *
vorhanden sind , später hinzugefügte Spalten nicht automatisch enthalten. Die Abfragezeichenfolge selbst wird nicht gespeichert, nur die interne Darstellung nach Erweitern von SELECT *
und andere Dinge wie das Auflösen aller Identifikatoren.
REFRESH MATERIALIZED VIEW
nie ändert die Datendefinition, nur Daten:
Das Handbuch könnte expliziter darüber sein, aber der Vergleich zum Verhalten von CREATE TABLE AS
machte es mir klar: