Perl: существует ли функция DBI, аналогичная statistics_info, для извлечения ссылок и ограничений FK?
При выполнении \d+
для таблицы в Postgres она перечисляет схему таблицы вместе с индексами, а также другие таблицы, которые ссылаются на нее как FK. Пример:
Table "public.foo_table"
Column | Type | Modifiers | Storage | Description
------------+------+---------------+----------+-------------
id | text | | extended |
foo | text | | extended |
bar | text | | extended |
Indexes:
"foo_table_id_idx" btree (id)
"foo_table_foobar_idx" btree (foo,bar)
Foreign-key constraints:
"foo_table_bar_fk" FOREIGN KEY (bar) REFERENCES public.bar_table(id)
Referenced by:
TABLE "public.bar_table" CONSTRAINT "bar_table_foo_fk" FOREIGN KEY (foo) REFERENCES public.foo_table(foo)
Has OIDs: no
Вы можете сделать что-то $dbh->statistics_info(...)
чтобы получить информацию индекса. Есть ли что-то похожее для получения информации FK (ссылки и ссылки)?
Похоже, мой следующий вариант - либо выдать ->do()
или запросить системные таблицы.
2 ответа
Что я нашел до сих пор:
$dbh->foreign_key_info( pk_cat, pk_schema, pk_tbl
, fk_cat, fk_schema, fk_tbl );
# FK References
$dbh->foreign_key_info( undef , undef , undef
, undef , undef , $table_name );
# FK Referenced By
$dbh->foreign_key_info( undef , undef , $table_name
, undef , undef , undef );
## Putting the schema/catalog info only ensures you are hitting the intended
## table. If you have dupicate tables, or your table is not in the public
## schema it's probably a good idea to include the schema.
## Catalog is generally unnecessary for Postgres
Если вы запустите psql с -E
Опция покажет все запросы, которые он выполняет, чтобы ответить на \d
(и другие) запросы метаданных. Это довольно легко скопировать / вставить из него, чтобы получить запросы, которые вы хотите.