Tôi luôn cảm thấy cách thoải mái hơn việc tạo ra một kịch bản sql Tôi có thể xem xét và kiểm tra trước khi tôi chạy nó hơn là dựa vào việc nhận được plpgsql vừa phải để nó không thổi đi cơ sở dữ liệu của tôi. Một cái gì đó đơn giản trong bash mà chọn tablenames từ danh mục, sau đó tạo ra các báo cáo thả cho tôi. Vì vậy, đối với 8.4.x bạn sẽ nhận được truy vấn cơ bản này:
SELECT 'drop table '||n.nspname ||'.'|| c.relname||';' as "Name"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','v','S','')
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid);
Bạn có thể thêm mệnh đề where vào. (Nơi c.relname iLike 'Bubba%')
Output trông như thế này:
Name
-----------------------
drop table public.a1;
drop table public.a2;
Vì vậy, tiết kiệm mà vào một tập tin sql và chạy nó với psql -f filename.sql
Nguồn
2010-11-17 17:53:39
Cảm ơn bạn đã trả lời! Danh sách được phân cách bằng dấu phẩy rất hữu ích cho việc thả một danh sách nhỏ các bảng. Tuy nhiên, nó không thực tế cho việc giảm 20 bảng cùng một lúc (hoặc nhiều hơn). Tôi sẽ tập trung lại câu hỏi để rõ ràng hơn. –
Xin lỗi, đây là lựa chọn duy nhất bạn có. Bạn có thể xây dựng một chức năng được lưu trữ cho điều này, nhưng có một cơ hội tốt bạn sẽ bắn mình vào chân: thả quá nhiều bảng ... –
Chức năng được thêm vào, vui chơi! Và cẩn thận, điều này có thể phá hủy toàn bộ cơ sở dữ liệu của bạn. –