我使用的是mac版PostgreSql应用(http://postgresapp.com/)。我以前在其他机器上用过,但在我的macbook上安装时遇到了一些麻烦。我已经安装了应用程序,并运行:

psql -h localhost

它返回:

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

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

psql 

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

机统计数据:

OSX 10.8.4 发生冲突

任何帮助都是感激的。

我也尝试过通过自制程序安装PostgreSql,我也遇到了同样的问题。我还读了申请文档页面,上面写着:

当Postgres。app首先启动,它创建$USER数据库, 当没有指定时,它是PSQL的默认数据库。的 默认用户为$ user,没有密码。

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

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

psql -d template1

我不回答这个问题,直到有人能解释为什么这样做。


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

psql -d template1

template1是postgres自己创建的数据库,在所有安装中都有。 显然,您可以登录到template1,因此您必须拥有数据库分配给您的一些权限。在shell提示符下试试这个:

createdb

然后看看你能不能再登录

psql -h localhost

这将简单地为您的登录用户创建一个数据库,我认为这是您正在寻找的。如果createdb失败了,那么您就没有足够的权限来创建自己的数据库,并且必须弄清楚如何修复自制程序包。


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

psql -U Username DatabaseName 

在使用自制程序安装postgresql之后,我仍然存在上面的问题-我通过将/usr/local/bin放在/usr/bin之前来解决这个问题


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

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

psql -d db_name -f query_file.sql

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

在OSX上,当我试图从Postgress启动psql时,我看到了以下错误。应用程序菜单:

psql: FATAL:数据库“otherdb”不存在

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

此外,如果PGUSER被设置为您的用户名以外的其他东西,将发生以下错误:

psql: FATAL:角色“note”不存在

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


在使用JDBC驱动程序时遇到了问题,因此只需要在URL中的主机名之后添加数据库(可能是冗余的,这取决于您可能使用的工具),例如。 jdbc: postgres: / / <主机(港口)> / < db名称>

详情请见:http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT


以默认用户登录:sudo -i -u postgres 创建新用户:createuser—interactive 当提示输入角色名时,输入linux用户名,对超级用户问题选择“是”。 仍然以postgres用户登录,创建数据库:createdb <username_from_step_3> 在命令提示符下输入:psql,确认错误已经消失。 输出应该显示psql (x.x.x)输入“help”以获取帮助。


使用默认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)

正如createdb文档所述:

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

因此,如果某些OS/postgresql发行版做的不同,它肯定不是默认的/标准的(刚刚验证了openSUSE 13.1上的initdb创建了DB "postgres",而不是"<user>")。长话短说,当使用“postgres”以外的用户时,预计psql -d postgres将被使用。

显然,可以接受的答案是运行createdb来创建一个与用户同名的DB,这也可以工作,但会创建一个多余的DB。


在终端上,只需运行命令提示窗口上的命令。(不在psql内部)。

createdb <user>

然后再试着运行postgres。


这是一个基本的误解。只是打字:

《植物遗传资源》

会得到这样的回应:

pgres <db_name> 

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

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


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

用你的用户名替换“skynotify”:

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

-d显式声明在此交互会话期间不显式包含db名称的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;"

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

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

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

.

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

即使没有返回行,也会得到字段名。

如果你的表有超过12行,或者你不确定,从行数开始来了解你的数据库中有多少数据会更有用:

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

.

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

不要认为“1行”使您感到困惑,它只是表示查询返回的行数,但1行包含您想要的计数,在本例中为0。

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


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

psql: FATAL:  database "user" does not exist

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

method1

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

和类型

 psql

方法2:

psql -d postgres

通过自制程序安装postgresql时遇到这个问题。

必须创建默认的“postgres”超级用户:

Createuser—交互postgres回答超级用户y Createuser—交互用户,回答y为超级用户


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


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

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

create database username;

现在尝试通过用户名连接


试着用,

PSQL -D Postgres

我在运行psql时也遇到了同样的问题


不确定答案中是否已经添加了,Anatolii Stepaniuk的回答非常有帮助,即以下内容。

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

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

$ createdb `whoami`

$ psql

psql (12.2)
Type "help" for help.

macuser=# 

您可以在env变量PGDATABASE=database_name中设置要连接的数据库名称。如果你不设置这个psql默认的数据库名称是用户名。设置后,你不需要createdb


步骤1:

PSQL -d template1

现在你应该在PSQL终端上

步骤2:

创建数据库用户名

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

可选:在PSQL终端上输入\ls或\l列出所有数据库;

步骤3:

PSQL -h localhost

现在你应该连接上了;


正在docker中运行postgres。在cli中,我得到的错误是“根”角色不存在。

关于我们- postgres

psql

解决了问题。

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

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

Su - postgres 然后你可以用下面的命令登录到PosgreSQL客户端:

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


这在我解决这个问题时很管用

我运行sudo -i -u postgress——>来访问我的postgres数据库。

然后输入密码。

它将允许您现在输入PSQL 什么会提示您执行其他命令

干杯!