Я пытаюсь восстановить дамп данных 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';