pg_dump:[archiver(db)]与数据库“mydb”的连接失败:致命:数据库“mydb”不存在

时间:2013-01-25 17:08:10

标签: sql postgresql heroku command-line pg-dump

好的,关注these instructions我已经跑了:

$ PGPASSWORD=mypassword pg_dump -Fc --no-acl --no-owner -h localhost -U myuser mydb > mydb.dump

在数据库所在的同一文件夹(app_db.sql)中,但我一直得到:

pg_dump: [archiver (db)] connection to database "mydb" failed: FATAL:  database "mydb" does not exist

为什么会发生这种情况,我该怎样解决?

由于

1 个答案:

答案 0 :(得分:4)

你严重误解了PostgreSQL的工作原理。

app_db.sql不是数据库,而是数据库转储。一系列文本命令,用于描述数据库中可以重放以创建数据库的数据。

它不像Microsoft Access .dbx文件或SQLite3数据库文件,是存储在单个文件中的数据库,可以直接操作。使用PostgreSQL数据库的唯一方法是通过客户端/服务器连接到PostgreSQL服务器,该服务器将实际的数据库内容存储在系统相关的位置,如/var/lib/pgsql,您永远不需要直接操作。

要使用数据库转储,您必须使用psql命令将其恢复到新的空数据库,例如:

$ createdb mydb
$ psql -f app_db.sql mydb

如果您尝试完全按上面所述运行它,则可能会因权限错误而失败。您需要为自己创建一个用户,为该用户授予mydb所有权,并可能编辑pg_hba.conf以允许您自行进行身份验证,具体取决于您的系统设置。

对于具有unix登录名bob的用户,更实际的示例可能是:

$ sudo -u postgres createuser bob
$ sudo -u postgres createdb -O bob mydb
$ psql -f dpp_db.sql -1 -v ON_ERROR_STOP=1 mydb 

我强烈建议您阅读PostgreSQL tutorial和用户手册。