LINUX.ORG.RU

perl, DBI, получение информации о таблице MySQL


0

0

Можно ли как-то получить информацию о том, что столбец имеет атрибуты UNIQUE или AUTO_INCREMENT.
Пробовал анализировать вывод $dbh->column_info, но не нашёл там ничего похожего.
Вот код, который я использую для получения информации о всех таблицах:

#!/usr/bin/perl
use warnings;
use strict;

# This program makes a snapshot of DB structure

use lib '..';
use Settings;
use Db;

my $st_table = $Db::dbh->table_info(undef, undef, undef, undef) or die "table_info failed\n";
my $table_hash;

my $i;
for( $i = 1; -e "snapshot_$i"; ++$i ) { }
open(STDOUT, ">snapshot_$i");

while( $table_hash = $st_table->fetchrow_hashref() ) {
    my $table_name = $table_hash->{TABLE_NAME};
    print "TABLE $table_name\n";
    my $st_field = $Db::dbh->column_info(undef, undef, $table_name, '%') or die "column_info failed\n";
    my $field_hash;
    my $primary_keys;
    while( $field_hash = $st_field->fetchrow_hashref() ) {
        $primary_keys .= ($field_hash->{COLUMN_NAME} . ",") if $field_hash->{mysql_is_pri_key};
        print "\t";
        print $field_hash->{COLUMN_NAME};
        print " ", $field_hash->{mysql_type_name};
        print " NOT NULL" if not $field_hash->{NULLABLE};
        print "\n";

        print "-------data-------\n";
        my( $key, $value );
        while( ($key, $value) = each(%{$field_hash}) ) {
            print "\"$key\"=>\"", (defined($value))?($value):("undef"), "\"\n";
        }
        print "-------end--------\n";
    }
    if ($primary_keys) {
        $primary_keys =~ s/^(.*),$/$1/;
        print "\tPRIMARY KEY ($primary_keys)\n";
    }
}

Db это вспомогательный класс, в данном случае он просто осуществляет соединение
с базой данных и создаёт $Db::dbh
★★★★★

explain TABLE_NAME; ?

anonymous
()

Спасибо, сделал с помощью EXPLAIN, работает.

Legioner ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.