关于postgresql:psql:FATAL:数据库 user不存在

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


  • 默认用户登录:sudo -i -u postgres
  • 新建用户:createuser --interactive
  • 当提示输入角色名时,输入linux用户名,然后选择Yes to Superuser Question。
  • 仍以Postgres用户身份登录,创建数据库:createdb
  • 在命令提示下输入:psql确认错误消失。
  • 输出应显示psql (x.x.x) Type"help" for help.

  • 使用默认模板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时看到以下错误:

    psql: FATAL: database"otherdb" does not exist

    该错误的解决办法是从~/.bash_profile中删除export PGDATABASE=otherdb

    此外,如果pguser设置为用户名以外的其他值,则将发生以下错误:

    psql: FATAL: role"note" does not exist

    解决方法是从~/.bash_profile中取出export PGUSER=notme


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

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

    1
    psql -d db_name -f query_file.sql


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


    如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上的initdb创建了db"postgres",而不是""。长话短说,当使用"postgres"以外的用户时,预计将使用psql -d postgres

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


    使用JDBC驱动程序有问题,所以只需在URL中的主机名后面添加数据库(可能是冗余的,这取决于您可能使用的工具),例如。jdbc:postgres:///

    更多详细信息记录在这里: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

    当我运行以下命令时:psql

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

    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;

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

    进入\q退出


    这是最简单的解释;这是一个无意义的问题。只是打字

    pgres

    将导致此响应。

    1
    pgres <db_name>

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

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