psql:FATAL:数据库“<user>”不存在</user>

时间:2013-07-13 19:18:24

标签: postgresql psql

我正在使用PostgreSql应用程序用于mac(http://postgresapp.com/)。我以前在其他机器上使用它但是在我的macbook上安装时给我带来了一些麻烦。我安装了应用程序,然后运行:

psql -h localhost

它返回:

psql: FATAL:  database "<user>" does not exist

似乎我甚至无法运行控制台来创建它试图找到的数据库。当我跑步时会发生同样的事情:

psql 

或者如果我从应用程序下拉菜单中启动psql:

机器统计信息:

  • OSX 10.8.4

  • psql(PostgreSQL)9.2.4

感谢任何帮助。

我还试图通过自制软件安装PostgreSql,我遇到了同样的问题。我还阅读了申请文档页面,其中说明了:

  

当Postgres.app首次启动时,它会创建$ USER数据库,   当没有指定时,这是psql的默认数据库。该   默认用户是$ USER,没有密码。

所以似乎应用程序没有创建$ USER但是我已经安装了 - &gt;卸载 - 重新安装了几次,所以它必须是我的机器的东西。

我找到了答案,但我不确定它是如何工作的,因为在这个帖子上回答的用户 - &gt; Getting Postgresql Running In Mac: Database "postgres" does not exist没有跟进。我使用以下命令让psql打开:

psql -d template1

我会留下这个答案,直到有人可以解释为什么会这样做。

23 个答案:

答案 0 :(得分:1019)

您的包管理器似乎无法为您创建名为$ user的数据库。

的原因
psql -d template1

适用于你的是template1是由postgres自己创建的数据库,并且存在于所有安装中。 您显然可以登录到template1,因此您必须拥有数据库为您分配的一些权限。在shell提示符下尝试:

createdb

然后查看是否可以使用

重新登录
psql -h localhost

这将只为您的登录用户创建一个数据库,我认为这是您正在寻找的。如果createdb失败,那么你没有足够的权限来创建自己的数据库,你将不得不弄清楚如何修复自制软件包。

答案 1 :(得分:129)

在终端上,只需在命令提示符窗口中运行命令即可。 (不在psql内)

createdb <user>

然后尝试再次运行postgres。

答案 2 :(得分:116)

默认情况下,postgres会尝试连接到与您的用户同名的数据库。要防止此默认行为,只需指定用户和数据库:

psql -U Username DatabaseName 

答案 3 :(得分:50)

  1. 以默认用户身份登录:sudo -i -u postgres
  2. 创建新用户:createuser --interactive
  3. 当提示输入角色名称时,请输入linux username,然后选择Yes to superuser question。
  4. 仍以postgres用户身份登录,创建数据库:createdb <username_from_step_3>
  5. 在命令提示符处输入:psql确认错误消失。
  6. 输出应显示psql (x.x.x) Type "help" for help.

答案 4 :(得分:38)

使用默认template1数据库登录:

#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)

使用userId:

创建数据库
template1=# CREATE DATABASE gogasca WITH OWNER gogasca ENCODING 'UTF8';
CREATE DATABASE

退出然后重新登录

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)

答案 5 :(得分:16)

当我尝试在mac上打开postgresql时遇到了同样的错误

psql: FATAL:  database "user" does not exist

我发现这个简单的命令来解决它:

方法1

$ createdb --owner=postgres --encoding=utf8 user

并输入

 psql

方法2:

psql -d postgres

答案 6 :(得分:11)

postgres的安装后,在我的情况下是12.2,我确实运行了以下命令String str = String.format("%02d:%02d:%02d", hour, min, sec);

createdb

答案 7 :(得分:5)

有同样的问题,一个简单的psql -d postgres做了(在终端输入命令)

答案 8 :(得分:5)

如果环境变量PGDATABASE设置为不存在的数据库的名称,也会发生此错误。

在OSX上,我在尝试从Postgress.app菜单启动psql时看到以下错误:

psql: FATAL: database "otherdb" does not exist

该错误的解决方案是从export PGDATABASE=otherdb中移除~/.bash_profile

此外,如果PGUSER设置为您的用户名以外的其他内容,则会出现以下错误:

psql: FATAL: role "note" does not exist

解决方案是从export PGUSER=notme删除~/.bash_profile

答案 9 :(得分:4)

正如createdb documentation所述:

  

初始化数据存储区时,initdb命令始终会创建第一个数据库...此数据库名为postgres。

因此,如果某些OS / postgresql发行版采用不同的方式,则肯定不是默认/标准(仅验证openSUSE 13.1上的initdb创建数据库“postgres”,而不是“&lt; user&gt;”) 。长话短说,psql -d postgres预计在使用“postgres”以外的用户时会被使用。

显然,接受的答案是,运行createdb来创建一个名为用户的数据库,也能正常工作,但会创建一个多余的数据库。

答案 10 :(得分:4)

由于此问题是搜索结果中的第一个问题,因此无论如何我都会针对不同的问题提出不同的解决方案,以便不会出现重复的标题。

psql中运行查询文件而不指定数据库时,可能会出现相同的错误消息。由于postgresql中没有use语句,我们必须在命令行中指定数据库,例如:

psql -d db_name -f query_file.sql

答案 11 :(得分:2)

不确定是否已将其添加到答案中,Anatolii Stepaniuk答案非常有帮助,如下所示。

psql -U Username postgres # when you have no databases yet

答案 12 :(得分:1)

有使用JDBC驱动程序的问题,因此只需在URL中的主机名后添加数据库(可能是冗余的,具体取决于您可能使用的工具),例如: 的 jdbc:postgres://<host(:port)>/<db-name>

此处记录了更多详细信息:http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT

答案 13 :(得分:0)

您可以在环境变量PGDATABASE = database_name中设置要连接的数据库名称。如果不设置此psql,则默认数据库名称为用户名。设置之后,您不必创建b

答案 14 :(得分:0)

第 1 步:

psql -d template1

现在你应该在 psql 终端上

第 2 步:

CREATE DATABASE username;

可选:在 psql 终端输入 \ls 以列出所有数据库

第 3 步:

psql -h localhost

现在您应该已连接

答案 15 :(得分:0)

尝试使用-

psql -d postgres

运行psql

时,我也面临着同样的问题

答案 16 :(得分:0)

通过现有的超级用户连接到postgres。

使用您要连接到Postgres的用户名创建数据库。

create database username;

现在尝试通过用户名连接

答案 17 :(得分:0)

我尝试了其中的一些解决方案,但它们并没有完全奏效(尽管它们在非常正确的轨道上!)

最后我的错误是:

  

致命:用户

的密码验证失败

当我运行以下命令时:psql

然后我运行了这两个命令:

dropdb()
createdb()

注意:此删除数据库,但我不需要它,由于某种原因我无法再访问pqsl,所以我删除并重新创建它。 然后psql再次工作。

答案 18 :(得分:0)

首先,创建一个与当前使用相同的数据库是有帮助的,以便在您只想使用默认数据库并创建新表而不显式声明数据库名称时防止出现错误。

替换&#34; skynotify&#34;用户名:

psql -d postgres -c "CREATE DATABASE skynotify ENCODING 'UTF-8';"

-d显式声明哪个数据库用作在此交互式会话期间不明确包含数据库名称的SQL语句的默认值。

获得PostgresQL服务器所具有的清晰图片的基础。

您必须连接到现有数据库才能以交互方式使用psql。幸运的是,您可以向psql索取数据库列表:

psql -l

                                          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总是被创建,因此当你只想让控制台开始在其他数据库上工作时,你应该将它用作故障安全数据库。如果不存在,则列出数据库,然后使用其中任何一个。

以类似的方式,从数据库中选择表格:

psql -d postgres -c "\dt;"

我的&#34; postgres&#34;数据库没有表,但任何数据库都会将基于文本的表输出到终端(标准输出)。

为了完整起见,我们也可以从表中选择所有行:

psql -d ruby-getting-started_development -c "SELECT * FROM widgets;"

 id | name | description | stock | created_at | updated_at 
----+------+-------------+-------+------------+------------
(0 rows)

即使返回零行,您也会获得字段名称。

如果您的表格包含十几行,或者您不确定,那么从计算行数开始,了解数据库中的数据量会更有用:

 psql -d ruby-getting-started_development -c "SELECT count(*) FROM widgets;"

 count 
-------
     0
(1 row)

并且不要那&#34; 1行&#34;让您感到困惑,它只表示查询返回的行数,但是1行包含您想要的计数,在此示例中为0。

注意:未定义所有者的数据库将由当前用户拥有。

答案 19 :(得分:-1)

通过自制软件安装postgresql时遇到此问题。

必须创建默认&#34; postgres&#34;超级用户:

  

createuser --interactive postgres为超级用户回答y

     

createuser --interactive user answer to to super user

答案 20 :(得分:-2)

在使用自制软件安装postgresql之后我仍然遇到了上述问题 - 我在/ usr / bin

之前将/ usr / local / bin放在我的路径中解决了

答案 21 :(得分:-3)

如果在使用 Capistrano 部署 Rails 项目时遇到此错误,则可能需要在远程服务器上创建数据库。

登录您的Ubuntu并运行:

sudo -u postgres psql

如果出现提示,请输入您的postgres用户密码。现在输入:

创建数据库
CREATE DATABASE dbname_production;

名称必须是您在生产服务器上shared/config/database.yml中指定的名称。

输入\q

退出

答案 22 :(得分:-7)

用最简单的解释;它的noob问题。只需输入

即可
  

pgres

将导致此回复。

pgres <db_name> 
如果用户具有访问数据库的权限,

将成功而不会出错。

可以查看导出的环境变量的详细信息,但这是不必要的......这太基础了,不能因任何其他原因而失败。