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

Bagaimana menemukan di mana fungsi sedang digunakan

Dengan asumsi Anda tahu itu adalah fungsi pemicu (yaitu RETURNS TRIGGER ), ini harus dilakukan:

SELECT tgname, tgrelid::regclass
FROM pg_trigger
WHERE tgfoid = 'func1'::regproc

Jika func1 kelebihan beban, Anda perlu menggunakan mis. tgfoid = 'func1(text,text)'::regprocedure .

Namun secara umum, mungkin juga muncul di pg_aggregate , atau pg_cast , atau dalam definisi tampilan, atau batasan centang, atau selusin tempat lainnya, dan Anda tidak ingin harus memeriksa semuanya.

Anda dapat mengetahuinya melalui pg_depend , yang melacak semua dependensi objek dalam database. Misalnya:

SELECT classid::regclass
FROM pg_depend
WHERE refobjid = 'func1'::regproc

Jika ini kembali mis. pg_attrdef , maka Anda tahu itu digunakan dalam kolom default. Bidang lain di pg_depend akan memberi tahu Anda tabel/kolom mana itu. Perhatikan bahwa panggilan dari fungsi lain tidak dianggap sebagai ketergantungan, jadi Anda masih perlu memeriksa pg_proc.prosrc .

Namun ada cara yang lebih sederhana untuk melacak sebagian besar dependensi:

BEGIN;
DROP FUNCTION func1();
ROLLBACK;

Jika func1 sedang digunakan, DROP akan (mungkin) gagal, dan kesalahan akan memberi tahu Anda di mana tepatnya.

Lebih mudah lagi, jika Anda memiliki shell yang berguna:Hanya dengan menjalankan pg_dump --schema-only dan lihat di mana func1 muncul.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hibernate 3.6.10 tidak menghapus secara kaskade melalui OneToMany JoinTable

  2. tidak dapat membuat ekstensi tanpa peran pengguna super

  3. Cara mengekstrak jam dari kueri di postgres

  4. Bisakah saya menggunakan Parallel.For dengan Perintah sql?

  5. Cara termudah untuk membungkam kata terlalu panjang untuk diindeks pemberitahuan di PostgreSQL