Postgresql - cơ sở dữ liệu sao lưu và khôi phục trên chủ sở hữu khác nhau?


83

Tôi đã sao lưu trên cơ sở dữ liệu trên máy chủ khác và có vai trò khác với những gì tôi cần, với lệnh này:

pg_dump -Fc db_name -f db_name.dump

Sau đó, tôi đã sao lưu bản sao lưu sang một máy chủ khác, nơi tôi cần khôi phục cơ sở dữ liệu, nhưng không có chủ sở hữu nào đượ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ó owner2và 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ột 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 quá trình khôi phục được chạy, tôi gặp các lỗi sau:

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

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


1
Bên cạnh --no-ownerđề xuất trong câu trả lời được chấp nhận, bạn cũng có thể cần --no-privileges. Xem câu trả lời này
mivk

Câu trả lời:


130

Bạn nên sử dụng --no-ownertùy chọn này, điều này sẽ ngừng pg_restorecố gắng đặt quyền sở hữu của các đối tượng cho chủ sở hữu ban đầu. Thay vào đó, các đối tượng sẽ được sở hữu bởi người dùng được chỉ định bởi--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


14
pg_dump --no-ownercũng nên làm điều đó
Nick Barnes

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

1
Vậy muốn đổi chủ thì phải backup không chủ? Vì tôi nghĩ rằng tôi có thể thay đổi chủ sở hữu khi khôi phục. Nhưng thậm chí thiết lập --roletrên chủ sở hữu khác nhau, nó vẫn đang 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

2
@Andrius: Bạn không cần phải thay đổi bản sao lưu của mình, câu trả lời của Gary sẽ giải quyết được vấn đề của bạn
Nick Barnes

5
Xem qua tất cả các bài đăng về chủ đề này, họ dường như cũng bỏ qua thực tế rằng cách tiếp cận này yêu cầu chủ sở hữu vai trò mới phải là siêu người dùng, ít nhất là trong quá trình khôi phục. Sau đó, mọi thứ suôn sẻ
chrismarx
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.