Я хочу получить информацию о схеме базы данных sqlite, как это делает .schema, но с Perl DBI. Первая попытка заключалась в том, чтобы получить имена таблиц с $dbh->tables
, но я получаю повторяющиеся имена таблиц. Это одна запись для самой таблицы и одна запись для каждого индекса, который у меня есть (table_a имеет 3 индекса и b один), каково обоснование этого ?.
DB<7> x $dbh->tables;
0 '"main"."table_a"'
1 '"main"."table_a"'
2 '"main"."table_a"'
3 '"main"."table_b"'
4 '"main"."sqlite_master"'
5 '"temp"."sqlite_temp_master"'
6 '"main"."table_a"'
7 '"main"."table_b"'
Я был бы признателен, если бы кто-нибудь мог дать подсказку по этим трем связанным вопросам: как получить только таблицы (без выполнения uniq) и почему для каждого индекса есть одна строка? Как я могу получить информацию об индексах? и все вместе, как получить эквивалентную информацию для .schema?
[обновлено] Я видел это на DBI 1.627
@names = $dbh->tables; # deprecated
Но не упоминается почему.
и они предлагают использовать
@names = $dbh->tables( $catalog, $schema, $table, $type );
но после прочтения DBI table_info, где объясняются эти параметры, я не совсем понял, как заполнить их для получения информации о таблицах, чтобы получить имена таблиц только один раз или, если возможно получить все это, ту же информацию, что с .schema.
Любой пример или ссылка на более подробное использование будут оценены.
[[ОБНОВЛЕНИЕ]] на всякий случай, это две проблемы, которые помешали мне найти ответ самостоятельно, прежде чем задать здесь вопрос:
1- Google направил меня на очень старую страницу документации DBD-sqlite, на которой почти ничего не было, и я не обратил внимания на ссылку на последний выпуск в верхней части страницы.
2- Прежде чем спрашивать здесь, я читал в других потоках о table_info (правильный ответ), но, несколько лет не писав кода DBI, я попал в одну из ловушек для новичков. Поскольку $ dbh-> tables возвращает массив, я не обращал внимания на то, что table_info возвращает обработчик оператора, поэтому, когда я попробовал x $dbh->table_info(...)
в отладчике и получил пустой хеш, я застрял. Я забыл о необходимости вызывать часть выборки для возвращаемого $ sth.