Postgresql - veritabanı yedekleme ve farklı sahibine geri yükleme?


88

Veritabanında farklı sunucuda yedekleme yaptım ve bu ihtiyacım olandan farklı bir role sahip, şu komutla:

pg_dump -Fc db_name -f db_name.dump

Ardından yedeklemeyi veritabanını geri yüklemem gereken başka bir sunucuya kopyaladım, ancak bu veritabanı için kullanılan böyle bir sahip yok. Diyelim ki veritabanının sahibi var owner1, ancak farklı sunucuda sadece benim var owner2ve bu veritabanını geri yüklemem ve sahibini değiştirmem gerekiyor.

Geri yüklerken başka bir sunucuda yaptıklarım:

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

Ancak geri yükleme çalıştırıldığında şu hataları alıyorum:

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

Sahibini değiştirmesi için nasıl belirtebilirim? Yoksa imkansız mı?


1
Ayrıca --no-ownerkabul edilen cevap önerildiği üzere, ayrıca gerekebilir --no-privileges. Bu cevabı
mivk

Yanıtlar:


134

--no-ownerSeçeneği kullanmalısınız , bu pg_restorenesnelerin sahipliğini orijinal sahibine ayarlamaya çalışmayı durdurur . Bunun yerine nesnelerin sahibi tarafından belirtilen kullanıcıya ait olacaktır.--role

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

pg_restore belgesi


14
pg_dump --no-ownerbunu da yapmalı
Nick Barnes

11
Tercihim bu tür kararları geri yüklemeye kadar ertelemektir. Bunu döküm aşamasında yaparsanız, ihracat yapmadan fikrinizi değiştiremezsiniz. Bunu geri yükleme sırasında yapmak, eksik rolü gerçekten
Gary

1
Yani sahibi değiştirmek istersem, sahibi olmadan yedeklemeliyim? Çünkü geri yüklerken sahibini değiştirebileceğimi düşündüm. Ama --rolefarklı bir sahibi ayarlasa bile , orijinal sahibini kullanmaya çalışıyordu (ama sonra kullanmadım --no-owner.
Andrius

2
@Andrius: Yedeklemenizi değiştirmenize gerek yok, Gary'nin cevabı sorununuzu çözmeli
Nick Barnes

5
Bu konudaki tüm gönderilere bakıldığında, bu yaklaşımın yeni rol sahibinin en azından geri yükleme sırasında bir süper kullanıcı olmasını gerektirdiği gerçeğini atladıkları görülüyor. Sonra her şey çalışır
chrismarx
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.