5

好的,按照我已经运行的这些说明:

$ 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

为什么会发生这种情况,我能做些什么来解决它?

谢谢

4

1 回答 1

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 教程和用户手册。

于 2013-01-26T06:41:42.477 回答