PSQL 数据库传输和错误
PSQL database transfer and errors
我正在将一个 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 文件的内容以确保它提供了我想要的内容,我将从 post 中省略它,因为它有太多行。
然后我尝试将转储放入我的新数据库中,如下所示:
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
检查应该放置数据的应用程序,我看到 none 应该传输的数据。我在其他 table 传输中遇到了其中一些错误,并且数据以某种方式进入了。我不明白的是,如果数据有相同的模式,或者为什么它会在相同的数据库中被拒绝。
当您 运行 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
我正在将一个 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 文件的内容以确保它提供了我想要的内容,我将从 post 中省略它,因为它有太多行。
然后我尝试将转储放入我的新数据库中,如下所示:
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
检查应该放置数据的应用程序,我看到 none 应该传输的数据。我在其他 table 传输中遇到了其中一些错误,并且数据以某种方式进入了。我不明白的是,如果数据有相同的模式,或者为什么它会在相同的数据库中被拒绝。
当您 运行 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