PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Das Aktualisieren einer materialisierten Ansicht enthält keine hinzugefügte Spalte

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: