Postgresql 无法使用DBIx::Class::Schema::Versioned创建非虚拟视图

Postgresql 无法使用DBIx::Class::Schema::Versioned创建非虚拟视图,postgresql,perl,database-schema,dbix-class,Postgresql,Perl,Database Schema,Dbix Class,我正在使用DBIx::Class::Schema::Versioned,我想在数据库中创建一个新视图作为表。设置\uuuuu包\uuuuuuu->result\u source\u instance->为虚拟(1)正确使用了架构中的视图定义(不创建表),但当我设置\uuuuuu-PACKAGE\uuuuuuuuu->result\u-source\u-instance->is\u-virtual(0)时数据库中未创建任何表,尝试获取结果集时抛出“关系不存在”错误(这是预期的) 我在文档中找不到任

我正在使用DBIx::Class::Schema::Versioned,我想在数据库中创建一个新视图作为表。设置
\uuuuu包\uuuuuuu->result\u source\u instance->为虚拟(1)
正确使用了架构中的视图定义(不创建表),但当我设置
\uuuuuu-PACKAGE\uuuuuuuuu->result\u-source\u-instance->is\u-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 ...
但是,包含2个版本之间差异的文件将显示为空,因此在升级架构时,除了在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;

非常感谢您的帮助

我不确定我是否理解这个问题,但以下是我的看法

创建视图是针对特定的查询、硬编码SQL来实现DBIx::Class没有提供的功能,并使这些查询的结果可供DBIx使用,并且能够使用通常的结果(集合)类

这并不意味着与博士后的观点相对应。”就DBIx而言,更新“视图”意味着在视图类中使用更新的SQL—不需要将其存储在数据库中

如果您在postgres中创建一个想要使用的视图,您可以,但我不相信Schema::Version与此有任何关系。毕竟,这只是存储查询的两种不同方式,不是吗

如果要对视图进行版本设置,可能需要查看完全不同的路径,并使用类似sqitch的方法对sql文件进行版本设置, 但是,您的架构文件无论如何都应该在版本控制系统中