896

我正在使用 Mac 的 PostgreSql 应用程序(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 但是我已经安装->卸载-重新安装了几次,所以它一定是我的机器上的东西。

我找到了答案,但我不确定它是如何工作的,因为在这个线程上回答的用户 - >让 Postgresql 在 Mac 中运行:数据库“postgres”不存在没有跟进。我使用以下命令让 psql 打开:

psql -d template1

在有人可以解释为什么这样做之前,我将不回答这个问题。

4

24 回答 24

1380

您的包管理器似乎未能为您创建名为 $user 的数据库。原因是

psql -d template1

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

createdb

然后看看你是否可以再次登录

psql -h localhost

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

于 2013-07-29T23:40:57.067 回答
274

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

createdb <user>

然后尝试再次运行 postgres。

于 2015-04-10T22:51:48.143 回答
212

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

psql -U Username DatabaseName 
于 2014-02-17T11:10:31.673 回答
77
  1. 以默认用户身份登录:sudo -i -u postgres
  2. 创建新用户:createuser --interactive
  3. 当提示输入角色名称时,输入 linux 用户名,然后选择 Yes to superuser question。
  4. 仍然以 postgres 用户身份登录,创建一个数据库:createdb <username_from_step_3>
  5. psql通过在命令提示符处输入:确认错误已消失。
  6. 输出应显示psql (x.x.x) Type "help" for help.
于 2014-11-03T19:52:46.373 回答
52

使用默认 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)
于 2015-02-24T07:26:09.733 回答
25

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

psql: FATAL:  database "user" does not exist

我找到了这个简单的命令来解决它:

方法1

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

并输入

 psql

方法二:

psql -d postgres
于 2017-04-08T07:49:15.740 回答
21

postgres 的安装后,在我的情况下版本是 12.2,我确实运行了以下命令createdb

$ createdb `whoami`

$ psql

psql (12.2)
Type "help" for help.

macuser=# 
于 2020-03-10T05:40:53.577 回答
11

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

于 2017-12-05T08:42:14.220 回答
11

尝试使用-

psql -d postgres

我跑的时候也遇到了同样的问题psql

于 2019-10-03T10:45:15.880 回答
8

第1步:

psql -d template1

现在你应该在 psql 终端上

第2步:

CREATE DATABASE username;

确保在数据库名称后使用分号 (;)

可选:在 psql 终端类型\ls\l列出所有数据库;

第 3 步:

psql -h localhost

现在您应该已连接;

于 2021-06-22T21:47:39.557 回答
7

如果环境变量 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.

于 2014-08-26T03:33:09.190 回答
6

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

psql -U Username postgres # when you have no databases yet
于 2020-02-24T17:51:55.943 回答
5

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

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

psql -d db_name -f query_file.sql
于 2014-08-17T09:58:29.593 回答
5

正如createdb 文档所述:

第一个数据库总是在初始化数据存储区时由initdb命令创建的……这个数据库叫做postgres。

因此,如果某些 OS/postgresql 发行版以不同的方式执行此操作,那肯定不是默认/标准(刚刚验证initdb在 openSUSE 13.1 上创建了数据库“postgres”,而不是“<user>”)。长话短说,psql -d postgres预计将在使用“postgres”以外的用户时使用。

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

于 2015-02-24T13:24:09.343 回答
3

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

将“skynotify”替换为您的用户名:

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

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

清楚了解您的 PostgresSQL 服务器中包含的内容的基础知识。

您必须连接到现有数据库才能以交互方式使用 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;"

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

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

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)

不要说“1 行”让您感到困惑,它仅表示查询返回了多少行,但 1 行包含您想要的计数,在本例中为 0。

注意:在没有定义所有者的情况下创建的数据库将归当前用户所有。

于 2016-09-15T06:12:35.477 回答
2

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

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

于 2014-08-26T13:38:50.727 回答
1

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

通过您连接到 postgres 的用户名创建一个数据库。

create database username;

现在尝试通过用户名连接

于 2019-06-07T10:42:58.377 回答
0

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

最后我的错误是:

致命:用户的密码验证失败

当我运行以下命令时:psql

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

dropdb()
createdb()

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

于 2018-05-03T00:08:58.540 回答
0

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

于 2020-08-24T16:42:31.237 回答
0

如果您使用 pgAdmin 工具并且在尝试连接到服务器时遇到此错误,请在该服务器的“属性”中的“连接”选项卡下,检查列为“维护数据库”的数据库是否存在。

如果删除了命名数据库,则此值不会自动更新,并且会阻止您的登录工作。如果这不起作用,请验证其余的 Connection 值是否正确。

于 2021-11-05T17:53:03.920 回答
0

在docker中运行postgres。在 cli 中,我收到错误“root”角色不存在。

su - postgres

psql

解决了这个问题。

PostgreSQL 在安装 PostgreSQL 时创建的系统上有自己的用户。postgres 用户无需使用密码即可登录 PostgreSQL。没有其他用户能够登录 PostgreSQL。

这意味着在使用 PostgreSQL 之前,您需要使用以下命令切换到该用户帐户:

su - postgres 然后您将能够使用以下命令登录 PosgreSQL 客户端:

psql 您将无法像任何其他用户一样从命令行访问数据库。

于 2022-01-21T06:57:37.613 回答
-1

通过自制软件安装 postgresql 时出现此问题。

必须使用以下命令创建默认的“postgres”超级用户:

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

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

于 2017-10-26T09:59:12.160 回答
-3

使用自制软件安装 postgresql 后,我仍然遇到上述问题 - 我通过将 /usr/local/bin 放在 /usr/bin 之前的路径中解决了这个问题

于 2014-08-02T01:40:29.713 回答
-22

这是一个基本的误解。只需键入:

pgres

将导致此响应:

pgres <db_name> 

如果用户具有访问数据库的权限,它将成功而不会出错。

可以深入了解导出的环境变量的详细信息,但这是不必要的.. 这太基本了,不会因为任何其他原因而失败。

于 2016-05-18T02:27:20.373 回答