Я использую DBIx :: Class :: Schema :: Versioned и хочу создать новое представление в виде таблицы в базе данных. Установка __PACKAGE__->result_source_instance->is_virtual(1);
позволяет правильно использовать определение представления из схемы (не создавая таблицу), но когда я устанавливаю __PACKAGE__->result_source_instance->is_virtual(0);
, в базе данных не создается таблица, и при попытке получить набор результатов возникает ошибка «отношение не существует» (что ожидалось ).
Я не смог найти в документации никакой ссылки на то, как должны создаваться представления в DBIx :: Class :: Schema :: Versioned. Что происходит, когда я запускаю различие между старой версией, которая не содержит представления, и новой версией, файл sql/MyProject-Schema-38-PostgreSQL.sql
содержит код для создания представления:
-- View: unlocked_pages
DROP VIEW unlocked_pages;
CREATE VIEW unlocked_pages ( page_id, username ) AS ...
но тогда файл, который содержит разницу между двумя версиями, кажется пустым, и поэтому при обновлении схемы ничего не делается, кроме добавления нового номера версии в dbix_class_schema_versions. Это содержимое sql / MyProject-Schema-37-38-PostgreSQL.sql:
-- Convert schema 'sql/MyProject-Schema-37-PostgreSQL.sql' to 'sql/MyProject-Schema-38-PostgreSQL.sql':;
-- No differences found;
Я использую postgresql, а определение в Schema.pm -
package MyProject::Schema;
# based on the DBIx::Class Schema base class
use base qw/DBIx::Class::Schema/;
use strict;
use warnings;
our $VERSION = 38;
# This will load any classes within
# MyProject::Schema::Result and MyProject::Schema::ResultSet (if any)
__PACKAGE__->load_namespaces();
__PACKAGE__->load_components(qw/Schema::Versioned/);
__PACKAGE__->upgrade_directory('../script/sql/');
1;
Любая помощь приветствуется!