Tôi sử dụng postgresql và tôi cần bỏ tất cả các bảng có trong lược đồ. Làm thế nào tôi có thể xóa từ dấu nhắc lệnh.
Tôi sử dụng postgresql và tôi cần bỏ tất cả các bảng có trong lược đồ. Làm thế nào tôi có thể xóa từ dấu nhắc lệnh.
Câu trả lời:
Bạn muốn sử dụng CASCADE
tùy chọn của DROP SCHEMA
. Từ tài liệu :
CASCADE
- Tự động thả các đối tượng (bảng, hàm, v.v.) có trong lược đồ và lần lượt tất cả các đối tượng phụ thuộc vào các đối tượng đó
HÃY CẨN THẬN - nhấn mạnh trên tôi.
Rõ ràng bạn sẽ cần tạo lại lược đồ sau đó.
Để chỉ thả tất cả các bảng trong lược đồ hiện tại, bạn có thể sử dụng tập lệnh này:
DO $$ DECLARE
tabname RECORD;
BEGIN
FOR tabname IN (SELECT tablename
FROM pg_tables
WHERE schemaname = current_schema())
LOOP
EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(tabname.tablename) || ' CASCADE';
END LOOP;
END $$;
Thay đổi WHERE schemaname = current_schema()
nếu bạn muốn thả tất cả các bảng trong một lược đồ khác.
LINE 2
? Có gì trên dòng 1?
@Techo Savvy
Bỏ bảng bằng cú pháp postgres:
select '-- drop table ' || tablename || ' cascade;' from pg_tables
where tablename not like 'pg%' and tablename not like 'sql%';
Sao chép văn bản kết quả vào một tập lệnh sql hoặc thiết bị đầu cuối psql. Lưu ý rằng các lệnh được nhận xét.
Nếu bạn chỉ muốn một cách thực sự đơn giản để làm điều này .. Đây là một kịch bản tôi đã sử dụng trong quá khứ
select 'drop table '||table_name||' cascade constraints;' from user_tables;
Điều này sẽ in ra một loạt các lệnh thả cho tất cả các bảng trong lược đồ. Spool kết quả của truy vấn này và thực hiện nó.
Tương tự như vậy nếu bạn muốn xóa nhiều hơn các bảng, bạn có thể chỉnh sửa các mục sau cho phù hợp với nhu cầu của mình
select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')
Nguồn: https://forums.oracle.com/forums/thread.jspa?threadID=614090