我使用以下命令创建备份并将postgres数据库从开发恢复到生产,但之后我无法创建新记录
Create a database backup:
PGPASSWORD=$DB_PASSWORD pg_dump \
--host=$DB_HOST \
--username=$DB_USERNAME \
--dbname=$DB_NAME \
--format=custom \
--file=D:/output.dmp
Restore a database from a backup
PGPASSWORD=$DB_PASSWORD pg_restore \
--host=$DB_HOST \
--username=$DB_USERNAME \
--dbname=$DB_NAME \
D:/output.dmp
DB Setting:
default: &default
adapter: postgresql
encoding: unicode
# For details on connection pooling, see Rails configuration guide
# https://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 10 } %>
development:
<<: *default
database: dev_db
username: postgres
password: mypass
production:
<<: *default
url: <%= ENV['DATABASE_URL'] %>
数据库URL:postgres://用户名:密码@production_host. com/数据库名称
PS:生产和开发中的Database_name、用户名不同。
错误:错误:重复键值违反了唯一约束"table_name_pkey"详细信息:键(id)=(1)已存在。
从这个错误中我可以理解的是"恢复后,当我创建一个新记录并保存到数据库时,这个错误发生了......所以基本上,恢复表的主键后不会根据数据递增,例如:如果恢复一个表,其中有80条记录,pkey为1 - 80,则当我创建一条新记录并尝试将其保存到表中时,它的pkey以1(而不是81)开始,这在恢复后已经存在于表中"
1条答案
按热度按时间qco9c6ql1#
您需要将转储还原到空数据库中,否则可能会发生这些错误。请在还原之前手动删除并重新创建数据库,或使用
pg_dump --clean --create
执行此操作。