Điều này sẽ tạo các câu lệnh để loại bỏ các bảng đã nói và không các đối tượng khác phù hợp với mẫu. Cũng không có bảng hệ thống.
SELECT 'DROP TABLE ' || c.oid::regclass || ';'
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace -- to restrict to a schema
WHERE c.relkind = 'r' -- only tables
AND c.relname ILIKE '%gtab%' -- pattern for table names
AND n.nspname = 'public' -- restrict to a schema
ORDER BY 1;
Truyền đến regclass
tự động thoát và lược đồ đủ điều kiện tên bảng khi cần thiết và an toàn trước SQL injection. Chi tiết:
Đối với nhiều bảng, một câu lệnh tích hợp duy nhất sẽ nhanh hơn:
SELECT 'DROP TABLE ' || string_agg(c.oid::regclass::text, ', ') || ';'
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = 'r'
AND c.relname ILIKE '%gtab%'
AND n.nspname = 'public'
ORDER BY 1;
Kết quả:
DROP TABLE tbl1, tbl2, schema1.tbl3;
Các câu trả lời liên quan:
- Có lệnh postgres để liệt kê / loại bỏ tất cả các chế độ xem cụ thể hóa không?
- Cách xóa các chuỗi không sử dụng?