У меня следующая миграция:
execute <<-SQL
CREATE TABLE test_table(
name char(20)
);
INSERT INTO test_table(name) values ('test name');
CREATE MATERIALIZED VIEW test AS
SELECT * from test_table
WITH DATA;
SQL
Обратите внимание, что я добавляю «С ДАННЫМИ».Это не заполняет данные (поскольку я получаю сообщение «материализованное представление не было заполнено» при попытке выполнить одновременное обновление представления) и добавляет «WITH NO DATA» в structure.sql
:
CREATE MATERIALIZED VIEW public.test AS
SELECT test_table.name
FROM public.test_table
WITH NO DATA;
Что я делаю неправильно?Документация Postgres о материализованных представлениях гласит: Запрос выполняется и используется для заполнения представления во время выполнения команды (если не используется WITH NO DATA) Таким образом, даже без указания «WITH DATA» он должен генерировать «WITHДАННЫЕ "по умолчанию, но вместо этого я получаю" БЕЗ ДАННЫХ ".Когда я использую сценическую библиотеку, она делает то же самое ...
Моя проблема похожа на Миграция ActiveRecord, не заполняющая материализованное представление Postgres
EDIT Я узнал, что данные на самом деле заполняются в среде разработки (хотя она устанавливает WITH NO DATA
в structure.sql
).Проблема в тестовой среде, где она иногда не заполняет данные.Все еще выясняю, почему ... Но, к сожалению, structure.sql
определенно не правильно.