無法為 Azure VM 上託管的 Django 應用恢復 postgresql 數據轉儲
我正在嘗試為我的 Django 應用程序恢復 postgres 數據轉儲。數據轉儲是從 Heroku 中提取的,而 pg_restore 正在執行 Linux 的 Azure VM 上。大約有 40 個表,總大小不超過 2GB。我嘗試了兩種方法;兩者都失敗了。**專家能指出這可能是什麼問題嗎?**請注意,postgres 數據轉儲被呼叫
latest.dump
並駐留/home/myuser/
在我的 Linux VM 中。方法一:
我將使用者切換到
postgres
viasudo su postgres
然後進入psql
. 我在那裡跑CREATE DATABASE mydatabase;
。接下來我退出psql
,並從使用者 postgres 執行以下命令pg_restore latest.dump -d mydatabase -U postgres
:該過程正在執行,但最後我得到:警告:還原時忽略錯誤:75
幾乎我得到的所有錯誤都是**“角色不存在”**類型:
pg_restore: [archiver (db)] Error from TOC entry 241; 1259 44416 TABLE links_grouptraffic uauvuro0s8b9v4 pg_restore: [archiver (db)] could not execute query: ERROR: role "uauvuro0s8b9v4" does not exist Command was: ALTER TABLE public.links_grouptraffic OWNER TO uauvuro0s8b9v4;
請注意,“uauvuro0s8b9v4”是 heroku 上的使用者;我還沒有在 Azure 上創建過這樣的使用者。當我在 example.cloudapp.net 上執行我的 Django 應用程序時,我看到一個權限被拒絕錯誤。全身是這樣的:
異常類型:DatabaseError 異常值:
關係連結連結的權限被拒絕
異常位置:/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py 在執行中,第 54 行
方法 2:
這一次,我再次通過
CREATE DATABASE mydatabase;
in創建一個新的數據庫psql
。然後我從 psql 中出來,然後執行python manage.py syncdb
(注意我在 APPROACH 1 中沒有這樣做)。結果創建的一堆表。我選擇yes
“我想創建一個超級使用者”。我提供了必要的細節,它是為我創建的。接下來,我快速執行python manage.py migrate djcelery
並python manage.py migrate user_sessions
遷移了兩個外部包。這樣我的表結構就完成了。然後我再次開始跑步
pg_restore latest.dump -d damadam -U postgres
。這次命令以警告:還原時忽略錯誤:333。
如果我去 example.cloudapp.net 測試我的應用程序,我沒有收到任何錯誤,但也沒有恢復任何數據(無論如何)。以下是執行時出現的錯誤
pg_restore
範例:1)關係已經存在:
pg_restore: [archiver (db)] Error from TOC entry 242; 1259 44432 SEQUENCE links_groupinvite_id_seq uauvuro0s8b9v4 pg_restore: [archiver (db)] could not execute query: ERROR: relation "links_groupinvite_id_seq" already exists Command was: CREATE SEQUENCE links_groupinvite_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
2)違反外鍵約束:
pg_restore: [archiver (db)] Error from TOC entry 2572; 0 44416 TABLE DATA links_grouptraffic uauvuro0s8b9v4 pg_restore: [archiver (db)] COPY failed for table "links_grouptraffic": ERROR: insert or update on table "links_grouptraffic" violates foreign key constraint "links_grouptraffic_visitor_id_fkey"
3)關係已經存在:
pg_restore: [archiver (db)] Error from TOC entry 2273; 1259 16773 INDEX links_link_submitter_id uauvuro0s8b9v4 pg_restore: [archiver (db)] could not execute query: ERROR: relation "links_link_submitter_id" already exists Command was: CREATE INDEX links_link_submitter_id ON links_link USING btree (submitter_id);
4)關係約束已經存在:
pg_restore: [archiver (db)] Error from TOC entry 2372; 2606 16881 FK CONSTRAINT links_userprofile_user_id_fkey uauvuro0s8b9v4 pg_restore: [archiver (db)] could not execute query: ERROR: constraint "links_userprofile_user_id_fkey" for relation "links_userprofile" already exists Command was: ALTER TABLE ONLY links_userprofile ADD CONSTRAINT links_userprofile_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth_u...
專家可以指出我做錯了什麼,在這裡做什麼是正確的嗎?
注意:如果您需要,請詢問更多資訊
您應該在恢復數據庫之前創建 uauvuro0s8b9v4 使用者,否則 pg_restore 會引發此類錯誤(在您的情況下,因為該使用者擁有很多關係)。
在 psql 中嘗試:
CREATE USER uauvuro0s8b9v4 WITH PASSWORD '12334444';