Bia*_*nca 5 postgresql perl database-schema dbix-class
我正在使用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 ...
Run Code Online (Sandbox Code Playgroud)
但是,包含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;
Run Code Online (Sandbox Code Playgroud)
我正在使用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;
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏!
我不确定我是否理解这个问题,但这是我的看法。
创建视图是针对特定查询、硬编码 SQL 来实现您认为 DBIx::Class 未提供的功能,并使这些查询的结果可供 DBIx 使用,并能够使用通常的结果(集)类。
它并不意味着对应于 postgres 中的视图。就 DBIx 而言,“更新”视图意味着在视图类中使用更新的 SQL - 无需将其存储在数据库中。
如果你在 postgres 中创建一个你想要使用的视图,你可以,但我不相信 Schema::Version 与它有任何关系。毕竟,这些只是存储查询的两种不同方式,不是吗?
如果您想要对视图进行版本控制,您可能必须查看完全不同的路线并使用 sqitch 之类的工具来对 sql 文件进行版本控制,但是,您的架构文件无论如何都应该位于版本控制系统中。
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |