PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách tìm chức năng đang được sử dụng ở đâu

Giả sử bạn biết đó là một hàm kích hoạt (tức là RETURNS TRIGGER ), điều này nên làm điều đó:

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

Nếu func1 quá tải, bạn sẽ cần sử dụng ví dụ:tgfoid = 'func1(text,text)'::regprocedure .

Nhưng nói chung, nó cũng có thể xuất hiện trong pg_aggregate hoặc pg_cast , hoặc trong một định nghĩa chế độ xem, hoặc một ràng buộc kiểm tra, hoặc một tá vị trí khác và bạn không muốn phải kiểm tra tất cả chúng.

Bạn có thể tìm hiểu phần cuối của vấn đề này qua pg_depend , theo dõi tất cả các phụ thuộc đối tượng trong cơ sở dữ liệu. Ví dụ:

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

Nếu điều này trả về, ví dụ: pg_attrdef , sau đó bạn biết nó được sử dụng trong một cột mặc định. Các trường khác trong pg_depend sẽ cho bạn biết chính xác đó là bảng / cột nào. Lưu ý rằng lệnh gọi từ một hàm khác không được coi là phụ thuộc, vì vậy bạn vẫn cần kiểm tra pg_proc.prosrc .

Nhưng có một cách đơn giản hơn để theo dõi phần lớn các phụ thuộc:

BEGIN;
DROP FUNCTION func1();
ROLLBACK;

Nếu func1 đang được sử dụng, DROP sẽ (có thể) không thành công và lỗi sẽ cho bạn biết chính xác vị trí.

Thậm chí còn dễ dàng hơn, nếu bạn có một shell tiện dụng:Chỉ cần chạy pg_dump --schema-only và xem func1 ở đâu xuất hiện.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cái cào bị hủy bỏ! Gem ::LoadError:'postgresql' được chỉ định cho bộ điều hợp cơ sở dữ liệu

  2. Tác nhân PostgreSQL trong ủy ban tiêu chuẩn SQL một lần nữa

  3. PostgreSQL để tìm điểm giữa giữa hai dấu thời gian

  4. Không còn dung lượng đệm (đã đạt đến kết nối tối đa?) Biểu mẫu Trình điều khiển Postgres EDB

  5. PostgreSql:Json Array to Rows bằng cách sử dụng liên kết bên