2016-03-30 14 views
3

Dijital okyanusta çalışan bir Django postgres db (v9.3.10) var ve bunu Amazon RDS'ye aktarmaya çalışıyorum (postgres v 9.4.5). RDS, 300 GB'lık bir db.m3.xlarge örneğidir. Birlikte Dijital Okyanus db terk ettim:Gönderi gönderileri RDS'ye dökülüyor

sudo -u postgres pg_dump -Fc -o -f /home/<user>/db.sql <dbname> 

Ve şimdi onu içinde taşımayı çalışıyorum:

pg_restore -h <RDS endpoint> --clean -Fc -v -d <dbname> -U <RDS master user> /home/<user>/db.sql 

gördüğüm tek hatadır:

pg_restore: [archiver (db)] Error from TOC entry 2516; 0 0 COMMENT EXTENSION plpgsql 
    pg_restore: [archiver (db)] could not execute query: ERROR: must be owner of extension plpgsql 
    Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; 

Bunun dışında her şey iyi gidiyor gibi görünüyor ve sonra sadece bir durma için biler. Döküm dosyası ~ 550MB'tır ve çok sayıda indeksi olan birkaç tablo vardır, aksi takdirde oldukça standarttır.

AWS arabirimindeki Okuma ve Yazma IOPS, CPU'nun, belleğin ve depolama biriminin olduğu gibi 0'a yakındır. AWS için çok yeni ve parametre gruplarının bunu daha iyi yapmak için ince ayarlara ihtiyaç duyabileceğini biliyorum. Birisi, Django db'yi RDS'ye geçirmenin daha iyi bir yolu olabilir mi? Bu yüzden görünmüyor

Role Name  Attr      Member Of 
<user>  Create role, Create DB {rds_superuser} 
rds_superuser Cannot login    {} 
rdsadmin  ...      ... 

: DO db benziyor db kullanıcıları baktığımızda

:

Düzenleme

gibi

Role Name Attr           Member Of 
<user>  Superuser          {} 
postgres Superuser, Create role, Create DB, Replication {} 

Ve RDS biri bakar < kullanıcı> gibi bir izin sorunu gibi, her durumda süper kullanıcı izinlerine sahip. Herkes seyir için

Çözüm:

Bu geri yükleme mekanizmasını ancak yalnızca bir yorumdur verilen/güvenilir bir yedekleme için ideal değil
cat <db.sql> | sed -e '/^COMMENT ON EXTENSION plpgsql IS/d' > edited.dump 
psql -h <RDS endpoint> -U <user> -e <dname> < edited.dump 

Elimden tahmin:

Sonunda bu kullanarak çalışma var sız yapmak. Diğer tek gözlemim, uzak bir bilgisayara psql/pg_restore çalıştırmanın yavaş olmasıdır. Umarım yeni database migration service bir şey ekleyecektir.

+0

Şimdi aynı postgres sürümünü kullanmak için RDS'yi değiştirdim ama yine de şans yok!Ben de çalışmazsa da psql ile olmayan bir özel biçim dökümünde boru denemeye çalıştım. Lütfen yardım et! –

cevap

0

Dumped DB dosyanızın ~ 550MB olduğunu düşünürsek, bunu yapmak için Amazon kılavuzunu kullanmayı düşünüyorum. Umut ediyorum bu yardım eder.

Importing Data into PostgreSQL on Amazon RDS

+0

Takip ettiğim rehber bu. Ancak hala askıda kalıyor ve sonunda sadece zaman aşımı görünüyor. Önerilen parametreleri doğru şekilde ayarlayıp ayarlamadığımı bilmiyorum. –

+0

Yerel makinenizde ayrıcalık sorunlarınız var. Bkz. Http://stackoverflow.com/questions/13410631/how-to-solve-privileges-issues-when-restore-postgresql-database –

+0

İzinlere baktım ve size neye benzediğini göstermek için soruyu düzenledim. psql'in. zaten her db (veya en azından RDS üzerinde yapabileceğimin en iyisi olan en az bir rds_superuser) üzerinde süper kullanıcı olarak bu yazıya belirtilen aynı sorun gibi görünmüyor. –

0

Ben durmadı düşünüyorum. Sadece indeksleri, yabancı anahtarları yeniden oluşturuyordu. Geri yükleme sırasında neler olduğunu görmek için pg_restore -v kullanın. Verileri kontrol ettikten sonra herhangi bir hata olup olmadığını kontrol etmek için günlükleri kontrol edin veya çıktıyı bir dosyaya yönlendirin.

Ayrıca, paralel geri yüklemeye izin verdiği için (pg_dump -v -Fd) dizin biçimini kullanmanızı tavsiye ederim (pg_restore -v -j4).

Bu ERROR: must be owner of extension plpgsql ürününü yoksayabilirsiniz. Bu, varsayılan olarak zaten yüklü olan uzantıya bir yorum oluşturmaktır. PostgreSQL'in RDS aromasında bu özellik, postgres kullanıcısı olarak bağlanırken bir veritabanının geri yüklenmesine izin vermeyen bir özellikten kaynaklanır.