Перенос базы данных PSQL и ошибки - PullRequest
0 голосов
/ 13 января 2019

Я переношу приложение rails на новый сервер и столкнулся с ошибками, не позволяющими передавать некоторые данные между приложениями с идентичной схемой БД.

Если я запускаю rake db: version на обоих серверах, я получаю одинаковый результат. На моем новом сервере:

RAILS_ENV=production rake db:version # Returns 20181207224901

На моем старом сервере:

heroku run rake db:version # Returns 20181207224901

Я получил данные со старого сервера с помощью следующей команды:

pg_dump --host=OMITTED_HERE_FOR_PRIVACY_SAKE --port=5432 --username=OMITTED_HERE_FOR_PRIVACY_SAKE --password --dbname=da466m517q6qf6 -t product_order_rows > pox4_product_order_rows.pg

Я знаю, что это правильный сервер, и проверил содержимое файла pg, чтобы убедиться, что он дал мне то, что я хотел, что я опущу в этом посте, поскольку в нем слишком много строк.

Затем я пытаюсь поместить дамп в мою новую базу данных следующим образом:

sudo psql -U pox4 pox4_production < pox4_product_order_rows.pg

И я получаю следующие ошибки:

SET
SET
SET
SET
 set_config 
------------

(1 row)

SET
SET
SET
SET
SET
ERROR:  relation "product_order_rows" already exists
ERROR:  role "wsgdzocxqkyzmj" does not exist
ERROR:  relation "product_order_rows_id_seq" already exists
ERROR:  role "wsgdzocxqkyzmj" does not exist
ALTER SEQUENCE
ALTER TABLE
ERROR:  insert or update on table "product_order_rows" violates foreign key constraint "fk_rails_7fc701b8a5"
DETAIL:  Key (model_id)=(17176) is not present in table "models".
 setval 
--------
   5021
(1 row)

ERROR:  multiple primary keys for table "product_order_rows" are not allowed
ERROR:  relation "index_product_order_rows_on_model_id" already exists
ERROR:  relation "index_product_order_rows_on_product_order_id" already exists
ERROR:  constraint "fk_rails_7fc701b8a5" for relation "product_order_rows" already exists
ERROR:  constraint "fk_rails_d38880b40c" for relation "product_order_rows" already exists

Проверяя приложение, в котором должны быть размещены данные, я не вижу ни одной из данных, по которым предполагается передавать данные. Я получил некоторые из этих ошибок при других передачах таблиц, и данные каким-то образом внесли это. Что я не понимаю, так это то, как данные вообще могут быть в первой базе данных, если они имеют одинаковую схему, или почему он будет отклонен в идентичной базе данных.

1 Ответ

0 голосов
/ 15 января 2019

при запуске heroku run rake db:version вы создаете схему своей базы данных. pg_dump по умолчанию выведет создание схемы в ваш pox4_product_order_rows.pg, что, почему у вас есть ошибка.

Вы можете добавить опцию --data-only в pg_dump, чтобы вывести данные без схемы. В вашем случае:

pg_dump --host=OMITTED_HERE_FOR_PRIVACY_SAKE --port=5432 --username=OMITTED_HERE_FOR_PRIVACY_SAKE --password --dbname=da466m517q6qf6 -t product_order_rows --data-only > pox4_product_order_rows.pg

Вы также можете использовать pg_restore для восстановления только данных:

pg_retore -U pox4 --data-only --dbname pox4_production pox4_product_order_rows.pg
...