2012-04-18 41 views
18

Tôi có một cơ sở dữ liệu PostgreSQL 9.1 với 100 hoặc nhiều bảng được tải vào lược đồ 'công khai'. Tôi muốn di chuyển các bảng đó (nhưng không phải tất cả các hàm trong 'công khai') thành một lược đồ 'dữ liệu'.Làm thế nào để thay đổi lược đồ của nhiều bảng PostgreSQL trong một thao tác?

Tôi biết rằng tôi có thể sử dụng các bước sau để di chuyển 1 bảng cùng một lúc.

ALTER TABLE [tablename] SET SCHEMA [new_schema] 

Có thể di chuyển tất cả các bảng sang lược đồ mới trong một thao tác không? Nếu vậy, cách nào hiệu quả nhất để hoàn thành nhiệm vụ này?

Trả lời

34

DO sẽ làm các trick:

DO 
$$ 
DECLARE 
    row record; 
BEGIN 
    FOR row IN SELECT tablename FROM pg_tables WHERE schemaname = 'public' -- and other conditions, if needed 
    LOOP 
     EXECUTE 'ALTER TABLE public.' || quote_ident(row.tablename) || ' SET SCHEMA [new_schema];'; 
    END LOOP; 
END; 
$$; 
+0

Đó là âm thanh chính xác như những gì tôi đã tưởng tượng. Vì tôi mới đến bưu điện, tôi nên chạy cái này ở đâu? Tôi đã thử trong pgAdmin 3 (cửa sổ) và dòng lệnh psql, nhưng có lỗi trong cả hai trường hợp. Cảm ơn vì sự hỗ trợ của bạn! – RyanDalton

+0

Nó chỉ là một phần của SQL, chạy nó giống như bất kỳ truy vấn nào trong SQL-client yêu thích của bạn. Bạn có thể sử dụng psql, pgAdmin3 hoặc một cái gì đó như thế. –

+0

Lỗi tôi nhận được từ pgAdmin3 là: "L ERI: loại" quote_ident "không tồn tại. Trạng thái SQL: 42704. Ngữ cảnh: Hàm PL/pgSQL" inline_code_block "dòng 5 tại câu lệnh EXECUTE." – RyanDalton

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