我以前只使用过MySQL。Postgres对我来说有点不同。我正在尝试将Postgres应用程序用于OSX。我有一个来自开发服务器的数据库转储,我想创建正确的用户角色,并将数据库导入我的本地机器,这样我就可以在家里进行开发(无法远程访问数据库)。
我认为我已经创建了用户\du显示具有CreateDB权限的相应用户。然后我使用了\I~/dump.sql,它似乎已经导入了数据库。但是,当我使用\l列出数据库时,它不会显示。因此,我尝试使用psql-U用户名登录,但随后它告诉我"FATAL:数据库用户名不存在。"这不是登录的正确开关吗?这是帮助者说的。
我对一些简单的事情感到沮丧,所以我很感激任何帮助。使用Postgres应用程序,我如何创建必要的密码用户并导入数据库?谢谢你的帮助!
听起来你可能已经将转储加载到了连接到的数据库中。如果你在启动psql
时没有指定数据库,那么它将是以你的用户名命名的数据库。不过,这在一定程度上取决于创建转储文件时与pg_dump
一起使用的选项。
尝试:
psql -v ON_ERROR_STOP=1
CREATE DATABASE mynewdb TEMPLATE template0 OWNER whateverowneruser;
c mynewdb
i /path/to/dump/file.sql
就我个人而言,我建议始终使用pg_dump -Fc
来创建自定义格式的转储,而不是SQL转储。它们非常容易使用,而且pg_restore
比使用psql
恢复转储要好得多。
Mac用户:如果您在2023年来到这里,并且使用Mac操作系统,并且您已经使用pg_dump实用程序创建了数据库转储
A。转储采用SQL格式(简单格式)
pg_dump -U <USER_NAME> -h <DATABASE_HOST> <DB_NAME> > sample.sql
然后使用以下命令进行恢复。
首先,使用命令行/终端手动创建数据库
psql -U <USER_NAME> -h <DATABSE_HOST>
连接后,使用命令创建数据库
create database test;
q
现在使用以下命令恢复转储,您就完成了:)
psql -U <USER_NAME> -d <DATABSE_NAME> -h <DATABSE_HOST> < sample.sql
对于localhost,使用127.0.0.1作为数据库主机。
(B)转储采用二进制格式
pg_dump -U <USER_NAME> -h <DATABASE_HOST> -d <DB_NAME> -Fc > sample.dump
然后使用以下命令进行恢复。
首先,使用命令行/终端手动创建数据库
psql -U <USER_NAME> -h <DATABSE_HOST>
连接后,使用命令创建数据库
create database test;
q
现在使用以下命令恢复转储。
pg_restore -Fc -U <USER_NAME> -d <DATABSE_NAME> -h <DATABSE_HOST> sample.dump
对于localhost,使用127.0.0.1作为数据库主机。
注意:二进制备份是备份生产数据库的一个更实用的选择,因为它们提供了更快、更可靠、更一致的备份。但是,文本备份在某些情况下可能仍然有用,例如存档或手动检查备份文件。
-U <username>
使用psql指定用户名是正确的,但最后一个标记是此处的数据库名称。它解释为您没有指定用户,并且数据库是用户名。尝试在后面添加数据库名称,即psql -U username database
。
有关psql支持的无数开关的更多信息,请参阅psql-doc。