Pokud nepotřebujete, aby to bylo přenositelné na jiný RDBMS, je to moc rychlejší a jednodušší použití katalogových tabulek v pg_catalog
namísto standardního informačního schématu:
SELECT c.confrelid::regclass::text AS referenced_table
, c.conname AS fk_name
, pg_get_constraintdef(c.oid) AS fk_definition
FROM pg_attribute a
JOIN pg_constraint c ON (c.conrelid, c.conkey[1]) = (a.attrelid, a.attnum)
WHERE a.attrelid = '"Schema2"."TableB"'::regclass -- table name
AND a.attname = 'A_Id' -- column name
AND c.contype = 'f'
ORDER BY conrelid::regclass::text, contype DESC;
Vrátí:
referenced_table | fk_name | fk_definition
------------------+-------------------------+----------------------------------------------
Schema1.TableA | b1_fkey | FOREIGN KEY ("B_id") REFERENCES "Schema1"."TableA"("A_id")
Poznámky
-
Další dva sloupce jsou pouze orientační. Podle vašeho Q potřebujete pouze první sloupec.
-
Tím se vrátí vše odkazované tabulky všemi cizími klíči zahrnujícími daný název sloupce – včetně omezení FK na více sloupcích.
-
Název je automaticky kvalifikován pro schéma nebo není podle viditelnosti nastavené aktuální
search_path
. V případě potřeby je název také automaticky escapován (nepovolená nebo velká písmena, vyhrazená slova, ...).
Podívejte se na podrobnosti o pg_constraint
a pg_attribute
v návodu. A také více o typech identifikátorů objektů.
Související:
- Pokles omezení PostgreSQL s neznámým názvem
- Načítání všech PK a FK