我正在尝试恢复我的Django应用程序的postgres数据转储。 数据转储是从Heroku中提取的,并且pg_restore正在一个装有Linux的Azure VM上运行。 有大约40个表格,总大小不超过2GB。 我试了两种方法; 都失败了。 专家能指出什么可能是这里的问题吗? 请注意,postgres数据转储被称为latest.dump并驻留在我的Linux VM中的/home/myuser/ 。
方法1:
我通过sudo su postgres将用户切换到postgres ,然后进入psql 。 在那里我运行CREATE DATABASE mydatabase; 。 接下来我退出psql ,并从用户postgres运行以下命令: pg_restore latest.dump -d mydatabase -U postgres 。 这个过程是运行的,但最终我得到:
警告:在还原时忽略错误:75
几乎所有我得到的错误都是“angular色不存在”的types:
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上创build这样的用户。 当我在example.cloudapp.net运行我的Django应用程序时,我看到权限被拒绝的错误 。 全身是这样的:
exceptiontypes:DatabaseErrorexception值:
关联链接的权限被拒绝
exception位置:/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py执行中,第54行
方法2:
这一次,我再次通过CREATE DATABASE mydatabase;创build一个新的数据库CREATE DATABASE mydatabase; 在psql 。 然后我从psql出来,运行python manage.py syncdb (注意我没有在方法1中这样做)。 作为结果创build的一堆表。 我selectyes “我想创build一个超级用户”。 我给了必要的细节,它是为我创造的。 接下来,我快速运行python manage.py migrate djcelery和python manage.py migrate user_sessions来迁移两个外部软件包。 因此我的表结构是完整的。
然后我继续运行pg_restore latest.dump -d damadam -U postgres 。 这一次命令结束
警告:在还原时忽略错误:333。
如果我去example.cloudapp.nettesting我的应用程序,我得到没有错误,但没有数据被恢复(无论如何) 。 以下是在pg_restore运行时看到的错误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...
专家可以指出我做错了什么,在这里做什么是正确的?
注意:如有需要,请询问更多信息
你应该在恢复数据库之前创builduauvuro0s8b9v4用户,否则pg_restore会引发这样的错误(因为这个用户拥有很多关系)。
在psql中试试:
CREATE USER uauvuro0s8b9v4 WITH PASSWORD '12334444';