在 Rails 中配置备份 gem 5.2 - 执行 PostgreSQL 数据库备份
Configuring Backup gem in Rails 5.2 - Performing backup of PostgreSQL database
我想执行 PostgreSQL 数据库的定期备份,我目前的意图是使用 Backup 和 Whenever gems。我对 Rails 和 Postgres 比较陌生,所以我很有可能会犯一个非常简单的错误...
我目前正在尝试在我的开发机器 (MAC) 上设置流程,但在尝试连接到数据库时总是出现错误。
在终端 window 中,我执行了以下操作来检查我的数据库和连接的详细信息:
psql -d my_db_name
my_db_name=# \conninfo
You are connected to database "my_db_name" as user "my_MAC_username" via socket in "/tmp" at port "5432".
\q
我还手动创建了数据库备份:
pg_dump -U my_MAC_username -p 5432 my_db_name > name_of_backup_file
但是,当我尝试在 db_backup.rb
(由备份 gem 创建)中重复此操作时,出现以下错误:
[2018/10/03 19:59:00][error] Model::Error: Backup for Description for db_backup (db_backup) Failed!
--- Wrapped Exception ---
Database::PostgreSQL::Error: Dump Failed!
Pipeline STDERR Messages:
(Note: may be interleaved if multiple commands returned error messages)
pg_dump: [archiver (db)] connection to database "my_db_name" failed: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/pg.sock/.s.PGSQL.5432"?
The following system errors were returned:
Errno::EPERM: Operation not permitted - 'pg_dump' returned exit code: 1
我的内容db_backup.rb
:
Model.new(:db_backup, 'Description for db_backup') do
##
# PostgreSQL [Database]
#
database PostgreSQL do |db|
# To dump all databases, set `db.name = :all` (or leave blank)
db.name = "my_db_name"
db.username = "my_MAC_username"
#db.password = ""
db.host = "localhost"
db.port = 5432
db.socket = "/tmp/pg.sock"
# When dumping all databases, `skip_tables` and `only_tables` are ignored.
# db.skip_tables = ["skip", "these", "tables"]
# db.only_tables = ["only", "these", "tables"]
# db.additional_options = ["-xc", "-E=utf8"]
end
end
请你建议我需要做什么来解决这个问题并通过 db_backup.rb
代码执行相同的备份
万一其他人遇到类似情况,解决这个问题的关键是以下几行:
psql -d my_db_name
my_db_name=# \conninfo
我意识到我需要将 db.socket = "/tmp/pg.sock"
更改为 db.socket = "/tmp"
,这似乎已经解决了问题。
但是,我不明白为什么我的计算机上的路径与默认路径不同,因为我没有做任何事情来自定义任何 gem 或 Postgres 应用程序的安装
我想执行 PostgreSQL 数据库的定期备份,我目前的意图是使用 Backup 和 Whenever gems。我对 Rails 和 Postgres 比较陌生,所以我很有可能会犯一个非常简单的错误...
我目前正在尝试在我的开发机器 (MAC) 上设置流程,但在尝试连接到数据库时总是出现错误。
在终端 window 中,我执行了以下操作来检查我的数据库和连接的详细信息:
psql -d my_db_name
my_db_name=# \conninfo
You are connected to database "my_db_name" as user "my_MAC_username" via socket in "/tmp" at port "5432".
\q
我还手动创建了数据库备份:
pg_dump -U my_MAC_username -p 5432 my_db_name > name_of_backup_file
但是,当我尝试在 db_backup.rb
(由备份 gem 创建)中重复此操作时,出现以下错误:
[2018/10/03 19:59:00][error] Model::Error: Backup for Description for db_backup (db_backup) Failed!
--- Wrapped Exception ---
Database::PostgreSQL::Error: Dump Failed!
Pipeline STDERR Messages:
(Note: may be interleaved if multiple commands returned error messages)
pg_dump: [archiver (db)] connection to database "my_db_name" failed: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/pg.sock/.s.PGSQL.5432"?
The following system errors were returned:
Errno::EPERM: Operation not permitted - 'pg_dump' returned exit code: 1
我的内容db_backup.rb
:
Model.new(:db_backup, 'Description for db_backup') do
##
# PostgreSQL [Database]
#
database PostgreSQL do |db|
# To dump all databases, set `db.name = :all` (or leave blank)
db.name = "my_db_name"
db.username = "my_MAC_username"
#db.password = ""
db.host = "localhost"
db.port = 5432
db.socket = "/tmp/pg.sock"
# When dumping all databases, `skip_tables` and `only_tables` are ignored.
# db.skip_tables = ["skip", "these", "tables"]
# db.only_tables = ["only", "these", "tables"]
# db.additional_options = ["-xc", "-E=utf8"]
end
end
请你建议我需要做什么来解决这个问题并通过 db_backup.rb
代码执行相同的备份
万一其他人遇到类似情况,解决这个问题的关键是以下几行:
psql -d my_db_name
my_db_name=# \conninfo
我意识到我需要将 db.socket = "/tmp/pg.sock"
更改为 db.socket = "/tmp"
,这似乎已经解决了问题。
但是,我不明白为什么我的计算机上的路径与默认路径不同,因为我没有做任何事情来自定义任何 gem 或 Postgres 应用程序的安装