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(), или да направя запитване до системните таблици.


person vol7ron    schedule 16.04.2012    source източник
comment
намерени foreign_key_info, ще проверя как се използва, тъй като отнема 6 аргумента (странно)   -  person vol7ron    schedule 16.04.2012
comment
Значка за самообучаващ се в движение за @vol7ron :)   -  person Ωmega    schedule 16.04.2012
comment
@stackoverflow: Наистина ми се иска да не изтривате отговора си, наистина мисля, че беше полезен.   -  person vol7ron    schedule 16.04.2012


Отговори (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
person vol7ron    schedule 16.04.2012

Ако стартирате psql с опцията -E, той ще покаже всички заявки, които изпълнява, за да отговори на \d (и други) заявки за метаданни. Доста лесно е да копирате/поставите от това, за да получите желаните заявки.

person kgrittn    schedule 16.04.2012
comment
Това може да е добра алтернатива. Вече имам запитвания за извличане на информацията, все пак търсех нещо малко по-чисто - person vol7ron; 16.04.2012