2016-03-30 189 views
3

我有一個Django postgres db(v9.3.10)在數字海洋上運行,並且試圖將它遷移到Amazon RDS(postgres v 9.4.5)。 RDS是一個具有300GB的db.m3.xlarge實例。我甩了數字海洋分貝:將postgres轉儲遷移到RDS

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

而現在我想在與它遷移:

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

我看到的唯一錯誤是:

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'; 

除此之外,一切看起來都很順利,然後它就會停下來。轉儲的文件大約爲550MB,並且有幾個表格有多個索引,否則很標準。

AWS接口上的讀寫IOPS接近0,CPU,內存和存儲器的讀寫IOPS也接近0。我對AWS非常陌生,並且知道參數組可能需要調整才能更好地完成此操作。任何人都可以建議在這個或更好的方式將Django數據庫遷移到RDS?

編輯:

望着分貝用戶DO分貝的樣子:

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

和RDS一個樣子:

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

所以它看起來並不就像它對我的權限問題一樣<用戶>在每種情況下都具有超級用戶權限。

解決方案爲尋找

我終於得到了這個利用工作:

cat <db.sql> | sed -e '/^COMMENT ON EXTENSION plpgsql IS/d' > edited.dump 
psql -h <RDS endpoint> -U <user> -e <dname> < edited.dump 

這不是理想的可靠的備份/恢復機制,但由於它只是一個評論,我想我可以沒有。我唯一的觀察是,運行psql/pg_restore到遠程主機很慢。希望新的database migration service會增加一些東西。

+0

我已經改變RDS使用相同的postgres版本,但仍然沒有運氣!我試圖直接嘗試用psql管道進行非定製格式轉儲,但也無法工作。請幫忙! –

回答

0

考慮到你傾銷的DB文件大約是550MB,我認爲使用亞馬遜指南來做到這一點是出路。我希望它有幫助。

Importing Data into PostgreSQL on Amazon RDS

+0

這就是我遵循的指南。但它仍然掛起,最終似乎超時。我不知道我是否已經正確設置了建議的參數。 –

+0

您在本地計算機上遇到特權問題。查看http://stackoverflow.com/questions/13410631/how-to-solve-privileges-issues-when-restore-postgresql-database –

+0

我查看了權限並編輯了問題以向您展示\ du看起來像什麼PSQL。它看起來不像那個帖子中提到的那個問題,因爲已經是每個數據庫的超級用戶(或者至少是一個rds_superuser,這是我可以在RDS上做的最好的)。 –

0

我認爲它並沒有停止。它只是重新創建索引,外鍵等。使用pg_restore -v來查看恢復過程中發生了什麼。檢查日誌或將輸出重定向到文件以檢查導入後的任何錯誤,因爲這是冗長的。

另外我建議使用目錄格式(pg_dump -v -Fd),因爲它允許並行恢復(pg_restore -v -j4)。

你可以忽略這個ERROR: must be owner of extension plpgsql。這只是設置擴展的評論,無論如何默認安裝。這是由PostgreSQL的RDS特性造成的,它不允許在以postgres用戶連接時恢復數據庫。