postgresql: làm thế nào để tôi kết xuất và khôi phục vai trò cho một cụm?


27

Các vai trò được lưu trữ trong một cụm và làm cách nào để loại bỏ chúng?

Tôi đã thực hiện một pg_dump của một db và sau đó tải nó vào một cụm khác, nhưng tôi nhận được rất nhiều lỗi sau:

psql:mydump.sql:3621: ERROR:  role "myrole" does not exist 

Vì vậy, rõ ràng bãi chứa db của tôi không bao gồm các vai trò. Tôi đã thử bỏ db 'postgres', nhưng tôi cũng không thấy vai trò ở đó.

Tôi có cần sử dụng pg_dumpall --roles-onlykhông?

Phiên bản Postgresql 8.4.8 và 9.1.4 HĐH: Ubuntu 11.04 Natty

Câu trả lời:


37

Từ CREATE ROLEtài liệu :

Lưu ý rằng các vai trò được xác định ở cấp cụm cơ sở dữ liệu và do đó có giá trị trong tất cả các cơ sở dữ liệu trong cụm.

Vì kết pg_dumpxuất một cơ sở dữ liệu, bạn không thể trích xuất các vai trò với tiện ích đó. Các pg_dumpall --roles-onlylệnh mà bạn đề nghị sẽ làm việc - tuy nhiên bạn có thể cần phải lọc sản lượng của nó do đó vai trò chỉ mong muốn sẽ được tạo ra trong cluster mới.

Các vai trò được lưu trữ trong pg_authiddanh mục, được lưu trữ vật lý trong data/global/thư mục con của bản cài đặt PostgreQuery, cùng với các bảng toàn cụm khác. Bạn có thể truy vấn nội dung pg_authidthông qua pg_roleschế độ xem.

LƯU Ý : bạn sẽ cần quyền superuser để kết xuất các vai trò. Nếu không, bạn sẽ nhận được một sự cho phép từ chối trên SELECTtrên pg_authid- và ngay cả khi một superuser cấp SELECTquyền, bạn sẽ nhận được cùng một lỗi. Tuy nhiên, trong trường hợp này, bạn có thể liệt kê các vai trò bằng cách truy vấn pg_authidtrực tiếp, COPYnó vào một tệp và cuộn một số phép thuật để tạo các câu lệnh CREATE ROLEALTER ROLEcâu lệnh cần thiết .


Bạn có thể thêm cách khôi phục tất cả các vai trò (nghĩa là không cần lọc) không?
Ethan Furman

1
để khôi phục tất cả các vai trò, chỉ cần sao chép và dán đầu ra pg_dumpall --roles-onlyvào trình vỏ psql mong muốn. Hoặc cụ thể CREATE ROLEALTER ROLEdòng
Fernando Fabreti
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.