psql: FATAL: database “<user>” does not exist
我使用的是MacPostgreSQL应用程序(http://postgresapp.com/)。我以前在其他机器上使用过它,但在我的MacBook上安装时它会给我带来一些麻烦。我已经安装了应用程序并运行了:
1 | psql -h localhost |
它返回:
1 | psql: FATAL: DATABASE"<user>" does NOT exist |
似乎我甚至无法运行控制台来创建它试图查找的数据库。同样的事情也发生在我刚跑步的时候:
1 | psql |
或者如果我从应用程序下拉菜单启动psql:
机器统计:
OSX0.8
PSQL(PostgreSQL)9.2.4
感谢您的帮助。
我还尝试通过自制安装PostgreSQL,我也遇到了同样的问题。我还阅读了应用程序文档页面,其中说明:
When Postgres.app first starts up, it creates the $USER database,
which is the default database for psql when none is specified. The
default user is $USER, with no password.
所以看起来应用程序并没有创建$user,但是我已经安装了->卸载了,重新安装了好几次,所以它一定是我的机器的一部分。
我找到了答案,但我不确定它是如何工作的,因为在这个线程上回答的用户->让PostgreSQL在Mac上运行:数据库"Postgres"不存在,没有跟进。我使用以下命令让psql打开:
1 | psql -d template1 |
在有人能解释为什么这样做有效之前,我不会回答这个问题。
包管理器似乎未能为您创建名为$user的数据库。原因在于
1 | psql -d template1 |
对您来说,template1是Postgres本身创建的数据库,并且存在于所有安装中。显然,您可以登录到模板1,因此您必须拥有由数据库分配给您的一些权限。在shell提示下尝试此操作:
1 | createdb |
然后查看您是否可以使用
1 | psql -h localhost |
这只需为您的登录用户创建一个数据库,我认为这正是您需要的。如果CreateDB失败,那么您就没有足够的权限创建自己的数据库,您必须弄清楚如何修复自制包。
在终端上,只需在命令提示窗口上运行命令即可。(不在PSQL中)。
1 | createdb <user> |
然后再尝试运行postgres。
默认情况下,Postgres尝试连接到与用户同名的数据库。要防止这种默认行为,只需指定用户和数据库:
1 | psql -U Username DatabaseName |
使用默认模板1数据库登录:
1 2 3 4 5 6 7 8 9 10 11 12 | #psql -d template1 #template1=# \l List OF DATABASES Name | Owner | Encoding | COLLATE | Ctype | Access privileges -----------+---------+----------+-------------+-------------+--------------------- postgres | gogasca | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | gogasca | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca + | | | | | gogasca=CTc/gogasca template1 | gogasca | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca + | | | | | gogasca=CTc/gogasca (3 ROWS) |
使用用户ID创建数据库:
1 2 | template1=# CREATE DATABASE gogasca WITH OWNER gogasca ENCODING 'UTF8'; CREATE DATABASE |
退出,然后重新登录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | template1=# \q gonzo:~ gogasca$ psql -h localhost psql (9.4.0) TYPE"help" FOR help. gogasca=# \l List OF DATABASES Name | Owner | Encoding | COLLATE | Ctype | Access privileges -----------+---------+----------+-------------+-------------+--------------------- gogasca | gogasca | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | gogasca | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | gogasca | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca + | | | | | gogasca=CTc/gogasca template1 | gogasca | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca + | | | | | gogasca=CTc/gogasca (4 ROWS) |
我在Mac上打开PostgreSQL时也遇到了同样的错误
1 | psql: FATAL: DATABASE"user" does NOT exist |
我找到了这个简单的命令来解决它:
方法1
1 | $ createdb --owner=postgres --encoding=utf8 user |
类型
1 | psql |
方法2:
1 | psql -d postgres |
如果环境变量pgdatabase设置为不存在的数据库的名称,也可能发生此错误。
在OSX上,我在尝试从postgres.app菜单启动psql时看到以下错误:
该错误的解决办法是从
此外,如果pguser设置为用户名以外的其他值,则将发生以下错误:
解决方法是从
因为这个问题是搜索结果中的第一个问题,所以无论如何,我会在这里为不同的问题提出不同的解决方案,以避免标题重复。
在
1 | psql -d db_name -f query_file.sql |
有同样的问题,一个简单的
如CreateDB文档所述:
The first database is always created by the initdb command when the data storage area is initialized... This database is called postgres.
因此,如果某些OS/PostgreSQL发行版的做法不同,那么它肯定不是默认/标准(只是验证了OpenSUSE 13.1上的
显然,可以接受的答案是,运行
使用JDBC驱动程序有问题,所以只需在URL中的主机名后面添加数据库(可能是冗余的,这取决于您可能使用的工具),例如。
更多详细信息记录在这里:http://www.postgresql.org/docs/7.4/static/jdbc use.html jdbc-connect
首先,创建一个与当前使用相同的数据库是很有帮助的,这样可以防止在您只想使用默认数据库时出现错误,并在不显式声明数据库名称的情况下创建新表。
将"Skynotify"替换为您的用户名:
1 | psql -d postgres -c"CREATE DATABASE skynotify ENCODING 'UTF-8';" |
-d显式声明将哪个数据库用作此交互会话期间不显式包含db名称的SQL语句的默认数据库。
了解PostgreSQL服务器的基本信息。
必须连接到现有数据库才能交互使用psql。幸运的是,您可以向psql请求数据库列表:
1 | psql -l |
.
1 2 3 4 5 6 7 8 9 10 11 12 | List OF DATABASES Name | Owner | Encoding | COLLATE | Ctype | Access privileges ----------------------------------+-----------+----------+-------------+-------------+------------------- skynotify | skynotify | UTF8 | en_US.UTF-8 | en_US.UTF-8 | myapp_dev | skynotify | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | skynotify | UTF8 | en_US.UTF-8 | en_US.UTF-8 | ruby-getting-started_development | skynotify | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | skynotify | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/skynotify + | | | | | skynotify=CTc/skynotify template1 | skynotify | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/skynotify + | | | | | skynotify=CTc/skynotify (6 ROWS) |
这不会启动交互式控制台,它只是向终端输出一个基于文本的表。
正如另一个答案所说,Postgres总是被创建的,所以当您只想让控制台开始在其他数据库上工作时,应该将它用作故障保护数据库。如果没有,那么列出数据库,然后使用其中的任何一个。
以类似的方式,从数据库中选择表:
1 | psql -d postgres -c"\dt;" |
我的"Postgres"数据库没有表,但是任何一个这样做的数据库都会向终端输出一个基于文本的表(标准输出)。
为了完整起见,我们也可以从表中选择所有行:
1 | psql -d ruby-getting-started_development -c"SELECT * FROM widgets;" |
.
1 2 3 | id | name | description | stock | created_at | updated_at ----+------+-------------+-------+------------+------------ (0 ROWS) |
即使返回了零行,也会得到字段名。
如果表的行数超过了12行,或者您不确定,那么从行数开始了解数据库中有多少数据会更有用:
1 | psql -d ruby-getting-started_development -c"SELECT count(*) FROM widgets;" |
.
1 2 3 4 | COUNT ------- 0 (1 ROW) |
不要让"1行"混淆了,它只是表示查询返回了多少行,但是1行包含您想要的计数,在本例中是0。
注意:未定义所有者的数据库将由当前用户拥有。
我试过其中的一些解决方案,但效果不太好(尽管它们走的很对!)
最后,我的错误是:
FATAL: password authentication failed for user
当我运行以下命令时:
然后我运行了这两个命令:
1 2 | dropdb() createdb() |
注意:这将删除数据库,但我不需要它,因为某些原因我无法再访问pqsl,所以我删除并重新创建了它。后来,以东十一〔三〕又工作了。
通过自制安装PostgreSQL时出现此问题。
必须创建默认的"Postgres"超级用户:
createuser --interactive postgres answer y to for super user
createuser --interactive user answer y to for super user
在使用homebrew安装了postgresql之后,我仍然遇到了上述问题-我将/usr/local/bin放在/usr/bin之前的路径中解决了这个问题。
如果在使用Capistrano部署Rails项目时遇到此错误,则可能需要在远程服务器上创建数据库。
登录您的Ubuntu并运行:
1 | sudo -u postgres psql |
如果出现提示,请输入Postgres用户密码。现在,通过输入以下内容创建数据库:
1 | CREATE DATABASE dbname_production; |
名称必须是您在生产服务器上的
进入
这是最简单的解释;这是一个无意义的问题。只是打字
pgres
将导致此响应。
1 | pgres <db_name> |
如果用户具有访问数据库的权限,将成功而不会出错。
您可以详细了解导出的环境变量,但这是不必要的。这太基本了,不能因为任何其他原因而失败。