Database

無法為 Azure VM 上託管的 Django 應用恢復 postgresql 數據轉儲

  • January 24, 2016

我正在嘗試為我的 Django 應用程序恢復 postgres 數據轉儲。數據轉儲是從 Heroku 中提取的,而 pg_restore 正在執行 Linux 的 Azure VM 上。大約有 40 個表,總大小不超過 2GB。我嘗試了兩種方法;兩者都失敗了。**專家能指出這可能是什麼問題嗎?**請注意,postgres 數據轉儲被呼叫latest.dump並駐留/home/myuser/在我的 Linux VM 中。

方法一:

我將使用者切換到postgresviasudo 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 djcelerypython 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';

引用自:https://serverfault.com/questions/745249