好的,关注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
为什么会发生这种情况,我该怎样解决?
由于
答案 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和用户手册。