| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #!/usr/bin/perl
- #
- # Copyright (C) Roman Dmitriev, rnd@rajven.ru
- #
- use utf8;
- use open ":encoding(utf8)";
- use open ':std', ':encoding(UTF-8)';
- use Encode;
- no warnings 'utf8';
- use English;
- use FindBin '$Bin';
- use lib "/opt/Eye/scripts";
- use Getopt::Long qw(GetOptions);
- use Data::Dumper;
- use eyelib::config;
- use eyelib::main;
- use eyelib::database;
- use eyelib::common;
- use eyelib::net_utils;
- use strict;
- use warnings;
- # debug disable force
- $debug = 0;
- # === Явное указание портов ===
- my $PG_PORT = 5432;
- # === Подключение к PostgreSQL (цель) ===
- my $pg_dsn = "dbi:Pg:dbname=$DBNAME;host=$DBHOST;port=$PG_PORT;";
- my $pg_db = DBI->connect($pg_dsn, $DBUSER, $DBPASS, {
- RaiseError => 0,
- AutoCommit => 1,
- pg_enable_utf8 => 1,
- pg_server_prepare => 0
- });
- if (!defined $pg_db) {
- print "Cannot connect to PostgreSQL server: $DBI::errstr\n";
- print "For install/configure PostgreSQL server please run migrate2psql.sh!\n";
- exit 100;
- }
- print "\n=== Resetting all table sequences ===\n";
- # Получаем список всех таблиц из целевой схемы (PostgreSQL)
- my $tables_sql = "SELECT tablename FROM pg_tables WHERE schemaname = 'public'";
- my $sth = $pg_db->prepare($tables_sql);
- $sth->execute();
- while (my ($table) = $sth->fetchrow_array) {
- # Формируем имя последовательности
- my $seq_name = "${table}_id_seq";
- # Проверяем, существует ли такая последовательность
- my ($exists) = $pg_db->selectrow_array(
- "SELECT 1 FROM pg_class WHERE relname = ? AND relkind = 'S'",
- undef, $seq_name
- );
- if ($exists) {
- # Получаем MAX(id)
- my ($max_id) = $pg_db->selectrow_array("SELECT MAX(id) FROM \"$table\"");
- $max_id //= 1;
- # Сбрасываем последовательность
- $pg_db->do("SELECT setval('$seq_name', $max_id)");
- print " → $table: sequence reset to $max_id\n";
- }
- }
- print "✅ All sequences updated.\n";
- exit 0;
|