Ответ
Обычные View (представления) не требуют явного обновления. Они являются виртуальными таблицами, основанными на SQL-запросе, и автоматически отражают актуальные данные из базовых таблиц при каждом обращении.
Когда требуется действие:
- При изменении схемы базовых таблиц (удаление/переименование столбцов) представление становится невалидным. Его необходимо пересоздать.
- Для материализованных представлений (MATERIALIZED VIEW) данные сохраняются физически на момент создания и требуют явного обновления командой
REFRESH.
Примеры:
-- Создание обычного View
CREATE VIEW active_users AS
SELECT id, username FROM users WHERE is_active = true;
-- Данные всегда актуальны при SELECT * FROM active_users
-- Пересоздание View при изменении схемы
CREATE OR REPLACE VIEW active_users AS
SELECT id, username, email FROM users WHERE is_active = true;
-- Обновление материализованного View
REFRESH MATERIALIZED VIEW CONCURRENTLY user_stats;
Почему: Обычные View — это сохранённые запросы, а материализованные — это снимки данных для производительности, которые устаревают.
Ответ 18+ 🔞
Давай разжую эту тему, как будто я тебе на кухне объясняю, пока чайник закипает. Представь, что обычный VIEW — это не таблица, а, блядь, окно. Просто окно, в которое ты смотришь.
Ты подходишь к этому окну, а там вид на твой двор — то есть на реальные таблицы users, orders, какие угодно. Ты каждый раз, когда в окно смотришь, видишь текущую картину. Кто-то во дворе машину поставил — ты видишь. Убрал — ты видишь. Окно само не пачкается и не меняется, оно просто показывает то, что есть прямо сейчас. Поэтому его не надо "обновлять" или "мыть". Подошёл, глянул — и всё, данные свежие.
Когда же надо шевелиться, сука?
-
Когда ты сам этот двор перекопал. Допустим, в таблице
usersбыл столбецphone_number, а ты его взял и нахуй удалил. А твоё окошко-VIEWкак раз на этот столбец смотрело. Ты теперь подходишь к окну, а там ошибка, типа "стекло разбито". Окно стало невалидным. Что делать? Переустановить окно! То есть выполнитьCREATE OR REPLACE VIEW ...с новым запросом, который уже на новые столбцы смотрит. -
Когда у тебя не окно, а фотография. Вот это, ёпта, важный момент! Есть же материализованные представления (
MATERIALIZED VIEW). Это не окно, а, блядь, снимок, фотография того двора, которую ты сделал вчера. И она висит у тебя на холодильнике. Удобно? Да, потому что смотреть на фото быстро. Но если сегодня во дворе снег выпал, а на фото ещё трава зелёная — то это пиздец, информация устарела. Вот такие "фотографии" требуют явного обновления. Надо сказать базе: "Слушай, иди, блядь, сделай новый свежий снимок!" КомандойREFRESH MATERIALIZED VIEW .... Иначе будешь жить в прошлом, как лох.
Короче, на пальцах:
-- Окно (всегда актуально). Ничего обновлять не надо.
CREATE VIEW active_users AS
SELECT id, username FROM users WHERE is_active = true;
-- Просто смотри в него каждый раз: SELECT * FROM active_users
-- Фотография (застывший снимок на момент создания). Требует обновления!
CREATE MATERIALIZED VIEW user_stats AS
SELECT user_id, COUNT(*) as order_count FROM orders GROUP BY user_id;
-- Со временем данные тут — старьё. Надо переснять:
REFRESH MATERIALIZED VIEW CONCURRENTLY user_stats;
Итог: Если у тебя простое VIEW (окно) — расслабься, оно живёт само. Беспокоиться надо только если ты схему базовых таблиц ломаешь, или если ты намудрил с материализованным VIEW (фотографией), которую нужно периодически тыкать, чтобы она актуальной была. Всё, понятно? Иди чай пей.