PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Temukan nama tabel yang direferensikan menggunakan tabel, bidang, dan nama skema

Jika Anda tidak memerlukan ini untuk dibawa ke RDBMS lain, ini banyak lebih cepat dan lebih mudah menggunakan tabel katalog di pg_catalog alih-alih skema informasi standar:

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;

Pengembalian:

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

Catatan

  • Dua kolom tambahan hanya untuk orientasi. Menurut Q Anda, Anda hanya membutuhkan kolom pertama.

  • Ini mengembalikan semua tabel yang direferensikan oleh semua kunci asing yang melibatkan nama kolom yang diberikan - termasuk batasan FK pada banyak kolom.

  • Nama secara otomatis memenuhi syarat skema atau tidak sesuai dengan visibilitas yang disetel oleh search_path saat ini . Nama juga diloloskan jika diperlukan (karakter ilegal atau huruf besar, kata-kata yang dicadangkan, ...) secara otomatis juga.

Lihat detail pg_constraint dan pg_attribute dalam manual. Dan lebih banyak lagi tentang tipe pengenal objek juga.

Terkait:

  • Batasan pelepasan PostgreSQL dengan nama tidak dikenal
  • Mengambil semua PK dan 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. Soket domain PostgreSQL UNIX vs soket TCP

  2. Cara Mengonversi String ke Nilai Numerik di PostgreSQL

  3. Pengecualian DBConcurrency Terjadi Saat Memperbarui Menggunakan Dataadapter

  4. Menghancurkan DB Postgres di Heroku

  5. Postgres SELECT di mana WHERE adalah UUID atau string