2015-07-17 23 views
32

tôi đã sao lưu trên cơ sở dữ liệu trên máy chủ khác nhau và có vai trò khác nhau hơn là tôi cần, với lệnh này:Postgresql - sao lưu cơ sở dữ liệu và khôi phục trên chủ sở hữu khác nhau?

pg_dump -Fc db_name -f db_name.dump 

Sau đó, tôi sao chép sao lưu vào một máy chủ mà tôi cần phải khôi phục lại cơ sở dữ liệu, nhưng không có như vậy chủ sở hữu đã được sử dụng cho cơ sở dữ liệu đó. Giả sử cơ sở dữ liệu có chủ sở hữu owner1, nhưng trên máy chủ khác, tôi chỉ có owner2 và tôi cần khôi phục cơ sở dữ liệu đó và thay đổi chủ sở hữu.

Những gì tôi đã làm trên máy chủ khác khi khôi phục:

createdb -p 5433 -T template0 db_name 
pg_restore -p 5433 --role=owner2 -d db_name db_name.dump 

Nhưng khi khôi phục được chạy tôi nhận được các lỗi này:

pg_restore: [archiver (db)] could not execute query: ERROR: role "owner1" does not exist 

Làm thế nào tôi có thể chỉ định nó để nó sẽ thay đổi chủ sở hữu? Hay là không thể?

Trả lời

47

Bạn nên sử dụng tùy chọn --no-owner, điều này dừng pg_restore cố gắng đặt quyền sở hữu đối tượng cho chủ sở hữu ban đầu. Thay vào đó, đối tượng sẽ được sở hữu bởi người sử dụng theo quy định của --role

createdb -p 5433 -T template0 db_name 
pg_restore -p 5433 --no-owner --role=owner2 -d db_name db_name.dump 

pg_restore doc

+5

'pg_dump --no-owner' cũng nên làm điều đó –

+3

sở thích của tôi là để trì hoãn những loại quyết định cho đến khi khôi phục. Nếu bạn làm điều đó ở giai đoạn bãi chứa nó có nghĩa là bạn không thể thay đổi tâm trí của bạn mà không làm xuất khẩu. Làm điều đó tại khôi phục có nghĩa là các tùy chọn được để mở trong trường hợp bạn quyết định rằng bạn thực sự nên tạo ra vai trò còn thiếu, vv – Gary

+0

Vì vậy, nếu tôi muốn thay đổi chủ sở hữu, tôi phải sao lưu mà không có chủ sở hữu? Vì tôi nghĩ tôi có thể thay đổi chủ nhân khi khôi phục. Nhưng thậm chí thiết lập '--role' trên chủ sở hữu khác nhau, nó vẫn cố gắng sử dụng chủ sở hữu ban đầu (nhưng sau đó tôi đã không sử dụng' --no-owner'. – Andrius

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