首页 文章

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

提问于
浏览
526

我正在使用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但是我已安装 - >已卸载 - 重新安装了几次,所以它必须是我的机器的东西 .

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

psql -d template1

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

17 回答

  • 33

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

    更多详细信息请记录在这里:http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT

  • 98

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

    在OSX上,我在尝试从Postgress.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 .

  • -3

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

  • 1

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

    最后我的错误是:

    致命:用户密码验证失败

    当我运行以下命令时: psql

    那么我运行了这两个命令:

    dropdb()
    createdb()
    

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

  • -6

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

    登录到您的Ubuntu并运行:

    sudo -u postgres psql
    

    如果出现提示,请输入您的postgres用户密码 . 现在输入以下命令创建数据库:

    CREATE DATABASE dbname_production;
    

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

    输入 \q 退出

  • 0

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

    psql -d template1
    

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

    createdb
    

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

    psql -h localhost
    

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

  • 4

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

  • -1

    正如createdb documentation所述:

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

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

    显然,运行 createdb 以创建名为用户的数据库的接受答案也可以,但是创建了一个多余的数据库 .

  • -2

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

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

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

  • 44

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

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

    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;"
    

    我的“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 .

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

  • 5

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

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

    psql -U Username DatabaseName
    
  • 4

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

    psql: FATAL:  database "user" does not exist
    

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

    方法1

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

    和类型

    psql
    

    方法2:

    psql -d postgres
    
  • 0

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

    createdb <user>
    

    然后尝试再次运行postgres .

  • 932

    这是最简单的解释;这是noob问题 . 只是打字

    pgres

    将导致此回复 .

    pgres <db_name>
    

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

    可以进入导出的环境变量的细节,但这是不必要的..这太基础了,不能因任何其他原因而失败 .

  • 4
    • 以默认用户身份登录: sudo -i -u postgres

    • 创建新用户: createuser --interactive

    • 当提示输入角色名称时,请输入linux用户名,然后选择“是”以超级用户问题 .

    • 仍以postgres用户身份登录,创建数据库: createdb <username_from_step_3>

    • 在命令提示符下输入: psql 确认错误消失 .

    • 输出应显示 psql (x.x.x) Type "help" for help.

  • 11

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

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

    psql -d db_name -f query_file.sql
    

相关问题