Não é possível restaurar o despejo de dados postgresql para o aplicativo Django hospedado na VM do Azure

1

Estou tentando restaurar um dump de dados postgres para um aplicativo Django meu. O dump de dados foi extraído do Heroku e o pg_restore está sendo executado em uma VM do Azure com o Linux. Existem cerca de 40 tabelas e o tamanho total não excede 2GB. Eu tentei duas abordagens; ambos falharam. Um especialista pode apontar qual pode ser o problema aqui? Observe que o despejo de dados postgres é chamado de latest.dump e reside em /home/myuser/ em minha VM do Linux.

ABORDAGEM 1:

Eu troco o usuário para postgres via sudo su postgres e, em seguida, entro em psql . Lá eu corro CREATE DATABASE mydatabase; . Em seguida, fecho psql e executo o seguinte comando do usuário postgres: pg_restore latest.dump -d mydatabase -U postgres . O processo é executado, mas no final eu recebo:

WARNING: errors ignored on restore: 75

Praticamente todos os erros que recebi foram do tipo 'não existe' :

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;

Note que 'uauvuro0s8b9v4' é o usuário no heroku; Eu não criei esse usuário no Azure. Quando eu executo meu aplicativo Django em example.cloudapp.net, vejo uma permissão negada error . Corpo inteiro é algo como:

Exception Type: DatabaseError Exception Value:

permission denied for relation links_link

Exception Location: /home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py in execute, line 54

ABORDAGEM 2:

Desta vez, eu novamente criei um novo banco de dados via CREATE DATABASE mydatabase; in psql . Então eu saio do psql e corro python manage.py syncdb (note que eu não fiz isso no APPROACH 1). Um monte de tabelas que são criadas como resultado. Eu seleciono yes para 'eu gostaria de criar um superusuário'. Eu dou os detalhes necessários e é criado para mim. Em seguida, executo rapidamente python manage.py migrate djcelery e python manage.py migrate user_sessions para migrar dois pacotes externos. Assim, minha estrutura de tabela está completa.

Eu então procuro executar pg_restore latest.dump -d damadam -U postgres novamente. Desta vez, o comando termina com

WARNING: errors ignored on restore: 333.

Se eu for a example.cloudapp.net para testar meu aplicativo, não receberei nenhum erro, mas nenhum dado foi restaurado (seja qual for) . A seguir, uma amostra de erros que são vistos enquanto o pg_restore está em execução:

1) A relação já existe:

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) Restrição de chave estrangeira violada:

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) A relação já existe:

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) A restrição para relação já existe:

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...

Um especialista pode apontar o que estou fazendo errado e qual é a coisa certa a fazer aqui?

Nota: por favor, peça mais informações caso você precise

    
por Hassan Baig 25.12.2015 / 13:52

1 resposta

1

Você deve criar o usuário uauvuro0s8b9v4 antes de restaurar o banco de dados ou o pg_restore irá gerar tais erros (já que este usuário possui muitas relações, no seu caso).

No psql tente:

CREATE USER uauvuro0s8b9v4 WITH PASSWORD '12334444';
    
por 24.01.2016 / 21:28