psql:FATAL:数据库"<user>"不存在

Rya*_*ich 649 postgresql psql

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

psql -h localhost
Run Code Online (Sandbox Code Playgroud)

它返回:

psql: FATAL:  database "<user>" does not exist
Run Code Online (Sandbox Code Playgroud)

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

psql 
Run Code Online (Sandbox Code Playgroud)

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

机器统计:

  • OSX 10.8.4

  • psql(PostgreSQL)9.2.4

任何帮助表示赞赏.

我也试图通过自制软件安装PostgreSql,我遇到了同样的问题.我还阅读了应用程序文档页面,其中说明:

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

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

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

psql -d template1
Run Code Online (Sandbox Code Playgroud)

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

Kir*_*bal 1084

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

psql -d template1
Run Code Online (Sandbox Code Playgroud)

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

createdb
Run Code Online (Sandbox Code Playgroud)

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

psql -h localhost
Run Code Online (Sandbox Code Playgroud)

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

  • 在我的情况下,我写了`$ createdb -h localhost`来解决错误`无法连接到数据库postgres:无法连接到服务器`.之后我可以通过`psql -h localhost`连接到postgresql控制台. (37认同)
  • 谢谢@Kirk.我们真的需要在你的第一个命令中使用`-d template1`吗?我在互联网上的教程中看过"template1",但这只会让我感到困惑.在我看来,更合乎逻辑的方法是1)创建PostgreSQL用户,例如"usera"2)创建一个与用户"usera"同名的数据库(我认为这很疯狂,但似乎PostgreSQL需要它)3)以超级用户"postgres"登录PostgreSQL并将数据库"usera"的权限分配给用户"usera"(哦,天哪,这真的是现实生活吗?) (2认同)

小智 158

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

createdb <user>
Run Code Online (Sandbox Code Playgroud)

然后尝试再次运行postgres.

  • 不知道`createdb`也是一个命令行工具 (12认同)
  • 你也可以只运行```createdb``` (6认同)
  • 美丽!做到了!运行此命令后,所有psql命令都可以正常运行!万分感谢! (3认同)
  • 给像我这样的用户的提示;)(不在 psql 内)。意味着当您刚刚打开终端窗口时,只需输入此 createdb 作为第一个命令,然后尝试登录 psql。 (3认同)
  • 我正在尝试 psql 模板。该死 (2认同)

Ane*_*Dev 136

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

psql -U Username DatabaseName 
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,你知道这样设计的原因 - 为什么我想在默认情况下去我的名字数据库呢? (11认同)
  • 你如何运行实际创建数据库的SQL脚本?在我的情况下,当我的目标是创建另一个数据库时,它总是尝试连接到数据库<user>:`psql -U Username -f create_db.sql`这将返回错误:`database Username不存在 (5认同)
  • 当你还没有数据库时`psql -U Username postgres` (5认同)
  • @eric数据库通常由作为专用用户运行的服务使用.所以我想使用用户名作为默认数据库名称的策略可能比使用一些固定的默认数据库名称(例如"postgres")更有用. (3认同)

小智 53

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


gog*_*sca 40

使用默认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)
Run Code Online (Sandbox Code Playgroud)

使用userId创建数据库:

template1=# CREATE DATABASE gogasca WITH OWNER gogasca ENCODING 'UTF8';
CREATE DATABASE
Run Code Online (Sandbox Code Playgroud)

退出然后再次登录

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)
Run Code Online (Sandbox Code Playgroud)


Cri*_*tea 24

步骤1:

psql -d template1

现在你应该在 psql 终端上

第2步:

CREATE DATABASE username;

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

可选:在 psql 终端上键入\ls\l列出所有数据库;

步骤3:

psql -h localhost

现在您应该已连接;


Din*_*apa 18

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

psql: FATAL:  database "user" does not exist
Run Code Online (Sandbox Code Playgroud)

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

方法1

$ createdb --owner=postgres --encoding=utf8 user
Run Code Online (Sandbox Code Playgroud)

并输入

 psql
Run Code Online (Sandbox Code Playgroud)

方法2:

psql -d postgres
Run Code Online (Sandbox Code Playgroud)

  • 方法2救了我的命 (3认同)

Sup*_*ova 17

Post installation of postgres, in my case version is 12.2, I did run the below command createdb.

$ createdb `whoami`

$ psql

psql (12.2)
Type "help" for help.

macuser=# 
Run Code Online (Sandbox Code Playgroud)


rus*_*ust 8

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


har*_*ugh 8

尝试使用-

psql -d postgres

我跑步时也面临同样的问题 psql


yos*_*e_k 8

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

psql -U Username postgres # when you have no databases yet
Run Code Online (Sandbox Code Playgroud)


Bab*_*yan 5

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

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

psql -d db_name -f query_file.sql
Run Code Online (Sandbox Code Playgroud)


小智 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.


use*_*249 5

正如createdb 文档所述:

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

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

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