PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Znajdź nazwę tabeli, do której się odwołuje, za pomocą nazwy tabeli, pola i schematu

Jeśli nie potrzebujesz tego, aby można go było przenieść do innego RDBMS, to jest dużo szybsze i prostsze w użyciu tabele katalogów w pg_catalog zamiast standardowego schematu informacyjnego:

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;

Zwroty:

 referenced_table | fk_name  |  fk_definition
------------------+-------------------------+----------------------------------------------
 Schema1.TableA   | b1_fkey  | FOREIGN KEY ("B_id") REFERENCES "Schema1"."TableA"("A_id")

Notatki

  • Dodatkowe dwie kolumny służą wyłącznie do orientacji. Według twojego pytania, potrzebujesz tylko pierwszej kolumny.

  • Zwraca wszystkie tabele, do których odwołują się wszystkie klucze obce dotyczące danej nazwy kolumny - w tym ograniczenia FK na wielu kolumnach.

  • Nazwa jest automatycznie kwalifikowana według schematu lub nie, zgodnie z widocznością ustawioną przez bieżącą search_path . Nazwa jest również automatycznie zmieniana w razie potrzeby (nielegalne lub wielkie litery, zastrzeżone słowa, ...) również automatycznie.

Sprawdź szczegóły pg_constraint i pg_attribute w instrukcji. I więcej o typach identyfikatorów obiektów.

Powiązane:

  • Ograniczenie upuszczania PostgreSQL o nieznanej nazwie
  • Pobieranie wszystkich PK i FK



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę uniemożliwić Postgresowi wstawianie podzapytania?

  2. Wczesne rejestracje ptaków otwarte na PGDay.IT 2011

  3. Indeks do znajdowania elementu w tablicy JSON

  4. Więcej SQL, mniej kodu, z PostgreSQL

  5. Jak zmienić użytkownika na superużytkownika w PostgreSQL?