2012-05-14 28 views
18

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

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; 
+1

Thông thường, 'ms.nspname = 'public'' áp dụng. – Drux

+0

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. –

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!

Các vấn đề liên quan