Назад | Перейти на главную страницу

Невозможно восстановить дамп данных postgresql для приложения Django, размещенного на виртуальной машине Azure

Я пытаюсь восстановить дамп данных postgres для моего приложения Django. Дамп данных был извлечен из Heroku, а pg_restore запускается на виртуальной машине Azure с Linux. Всего около 40 таблиц, а общий размер не превышает 2 ГБ. Я пробовал два подхода; оба потерпели неудачу. Может ли эксперт указать, в чем может быть проблема? Обратите внимание, что дамп данных postgres называется latest.dump и проживает в /home/myuser/ в моей виртуальной машине Linux.

ПОДХОД 1:

Я переключаю пользователя на postgres через 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. Когда я запускаю свое приложение Django на example.cloudapp.net и вижу ошибка отказа в разрешении. Полное тело - это что-то вроде:

Тип исключения: 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; в psql. Затем я выхожу из psql и запускаю python manage.py syncdb (обратите внимание, я не делал этого в ПОДХОДЕ 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';