Архивирование таблиц списаний - кому интересно - читайте.
Полностью согласен. В документации описаны правила архивирования, но даже ни слова о том, как его делать.ratelcom писал(а):А нельзя разработчиков попросить... кхм - сразу по уму сделать архивацию в ядре системы, чтобы оно само создавало новую таблицу каждый месяц, а то непонятные пляски с бубном вокруг легко решаемого со стороны разработчика вопроса.
Добавить простейший скрипт в систему не составит сложностей и непонятно, почему производитель этого не сделает.
re
А что за проблема? Можно подробности?
Сам не проверял. Однако тут так и не сказали про постгрес ничего определенного.
Уважаемые! такой вопрос...
Создал архив, создаю новую таблицу достаточно ли сделать это так:
либо надо указывать что :
т.к. указывать в таблице с какого id ей начинать?
Создал архив, создаю новую таблицу достаточно ли сделать это так:
Код: Выделить всё
CREATE TABLE IF NOT EXISTS `discount_transactions_all` (
`id` int(11) NOT NULL auto_increment,
`account_id` int(11) NOT NULL default '0',
`incoming_rest` double NOT NULL default '0',
`outgoing_rest` double NOT NULL default '0',
`discount` double NOT NULL default '0',
`discount_with_tax` double NOT NULL default '0',
`service_id` int(11) NOT NULL default '0',
`service_type` int(11) NOT NULL default '0',
`discount_period_id` int(11) NOT NULL default '0',
`slink_id` int(11) NOT NULL default '0',
`discount_date` int(11) NOT NULL default '0',
`charge_type` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB;");
-- --------------------------------------------------------
Код: Выделить всё
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=44160303 ;
При архивации указывать автоинкремент обязательно. Но вычислять его заморочно. Поэтому я сделал переименование таблицы в архивную ALTER TABLE discount_transactions_all RENAME TO arc_dta и создание основной по образцу архивной вот так CREATE TABLE discount_transactions_all LIKE arc_dta. При этом автоинкремент успешно переезжает в рабочую таблицу с минимальными заморочками. После этого я вставляю кусок данных за текущий месяц в рабочую таблицу и удаляю этот кусок из архивной. На этом действия по нервированию биллинга завершаются. Занимает операция с подменой таблички доли секунды. Всё прекрасно работает, после можно уже заняться разбором архива.
select `AUTO_INCREMENT` from information_schema.TABLES where TABLE_NAME='discount_transactions_all'JAO писал(а):При архивации указывать автоинкремент обязательно. Но вычислять его заморочно.
Код: Выделить всё
sub move_table_tmp {
my $t_name = shift;
my $SQL = "SHOW CREATE TABLE $t_name";
my $SQL2 = "select `AUTO_INCREMENT` from information_schema.TABLES
where TABLE_NAME='$t_name'";
$sth = $dbh->prepare($SQL2);
$sth->execute() or die "DB Error: $DBI::errstr\n";
my ($auto_inc)=$sth->fetchrow_array;
$sth = $dbh->prepare($SQL);
$sth->execute() or die "DB Error: $DBI::errstr\n";
my ($t_name,$t_conf_sql)=$sth->fetchrow_array;
if ($auto_inc > 1) {
$t_conf_sql = $t_conf_sql . " AUTO_INCREMENT=$auto_inc";
};
print "Movie $t_name to $t_name" . "_bak\n\n";
print "SQL: $t_conf_sql\n\n";
$SQL = "RENAME TABLE `".$DBname."`.`".$t_name."` TO `".$DBname."`.`".$t_name."_bak`";
$dbh->do($SQL);
$dbh->do($t_conf_sql);
}