Я хочу добавить триггер в свою базу данных. Я использую DBIx::Class
и следую этим примерам: 1, 2.
Мой код:Как создать триггер в БД с помощью «DBIx :: Class» с помощью метода add_trigger?
package App::Schema;
use base qw/DBIx::Class::Schema/;
__PACKAGE__->load_namespaces();
sub sqlt_deploy_hook {
my ($self, $schema) = @_;
$schema->add_trigger(name => 'foo');
}
1;
Но я получаю эту ошибку:
Failed to translate to YAML: translate: Error with producer 'SQL::Translator::Producer::YAML': Can't call method "name" on an undefined value at /home/kes/work/projects/x/app/local/lib/perl5/SQL/Translator/Schema/Trigger.pm line 198
При запуске команды со всеми переменными окружения в соответствии с требованиями dbic-migration
:
dbic-migration --force --schema_class App::Schema --database PostgreSQL -Ilib prepare
Какая точка мне где-то в SQL::Translator::Schema::Trigger
Что я скучаю ? Как исправить эту ошибку?
UPD
Даже когда я добавляю все аргументы, я получил сообщение об ошибке:
Failed to translate to YAML: translate: Error with parser 'SQL::Translator::Parser::DBIx::Class': Table named users doesn't exist at /home/kes/work/projects/x/app/local/lib/perl5/SQL/Translator/Schema/Trigger.pm line 54
Here целевая линия:
my $table = $args->{schema}->get_table($arg)
or die "Table named $arg doesn't exist";
Модифицированный код:
sub sqlt_deploy_hook {
my ($self, $schema) = @_;
warn "TABLES: " ,$schema->get_tables ,"\n";
$schema->add_trigger(()
,name => 'foo'
,perform_action_when => 'after'
,database_events => 'insert'
,on_table => 'users'
,action => 'text'
,scope => 'row'
);
}
Этот код производит следующие предупреждения:
TABLES: users
TABLES: dbix_class_deploymenthandler_versions
Но DB имеет только одну таблицу в данный момент. Я ожидаю, что он, по крайней мере, должны производить:
TABLES: users dbix_class_deploymenthandler_versions
Как создать триггер в DB
?