sql >> Databáze >  >> RDS >> PostgreSQL

Najděte název odkazované tabulky pomocí názvu tabulky, pole a schématu

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



  1. Laravel 5.4 na PHP 7.0:Výjimka PDO – Nelze najít ovladač (MySQL)

  2. Největší bezpečnostní hrozby PostgreSQL

  3. SQLite a inicializace databáze

  4. Obnovte kořenové heslo MySQL ve Windows