无法恢复 Azure VM 上托管的 Django 应用程序的 postgresql 数据转储

无法恢复 Azure VM 上托管的 Django 应用程序的 postgresql 数据转储

我正在尝试为我的 Django 应用程序恢复 postgres 数据转储。数据转储是从 Heroku 中提取的,并且 pg_restore 正在装有 Linux 的 Azure VM 上运行。大约有 40 个表,总大小不超过 2GB。我尝试了两种方法;都失败了。专家能指出这里可能存在什么问题吗?请注意,postgres 数据转储被调用latest.dump并驻留/home/myuser/在我的 Linux VM 中。

方法一:

我切换到postgresvia用户sudo 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 异常值:

关系 links_link 的权限被拒绝

异常位置:/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(注意,我在方法 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...

专家能指出我做错了什么吗?以及正确的做法是什么?

注:如有需要,请询问更多信息

答案1

您应该在恢复数据库之前创建 uauvuro0s8b9v4 用户,否则 pg_restore 将引发此类错误(因为在您的情况下,该用户拥有很多关系)。

在 psql 中尝试:

CREATE USER uauvuro0s8b9v4 WITH PASSWORD '12334444';

相关内容