Tôi có một cơ sở dữ liệu với phiên bản cũ của PostGIS đã được cài đặt trong đó. Tôi muốn dễ dàng bỏ tất cả các chức năng trong cơ sở dữ liệu (tất cả đều là từ PostGIS). Có một cách đơn giản để làm điều này? Thậm chí chỉ cần trích xuất một danh sách các tên hàm sẽ có thể chấp nhận được vì tôi chỉ có thể thực hiện một câu lệnh DROP FUNCTION
lớn.Thả tất cả các chức năng từ cơ sở dữ liệu Postgres
18
A
Trả lời
25
Một fine answer to this question can be found here:
SELECT 'DROP FUNCTION ' || ns.nspname || '.' || proname
|| '(' || oidvectortypes(proargtypes) || ');'
FROM pg_proc INNER JOIN pg_namespace ns ON (pg_proc.pronamespace = ns.oid)
WHERE ns.nspname = 'my_messed_up_schema' order by proname;
3
Cũng như đã có một postgis.sql
enabler install script, đó cũng là một kịch bản uninstall_postgis.sql
gỡ bỏ cài đặt.
psql -d [yourdatabase] -f /path/to/uninstall_postgis.sql
Cảnh báo: Chuẩn bị xem các cột/dữ liệu hình học/địa lý của bạn biến mất!
Thông thường, 'ms.nspname = 'public'' áp dụng. – Drux
SQL ở trên sẽ thất bại đối với trường hợp không thấp hơn hoặc không phải là tên hàm/lược đồ chữ và số. Sử dụng quote_ident hoặc định dạng tốt hơn ('DROP FUNCTION% I.% I (% s);', nspname, proname, oidvectortypes (proargtypes)) để nhận các mã định danh SQL được trích dẫn chính xác. –