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

我正在使用PostgreSql应用程序的mac( http://postgresapp.com/ )。 我以前在其他机器上使用过它,但在我的MacBook上安装时,给我带来一些麻烦。 我已经安装了应用程序,我跑了:

psql -h localhost 

它返回:

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

看来我甚至不能运行控制台来创build它试图find的数据库。 同样的事情发生时,我只是运行:

 psql 

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

机器统计:

  • OSX 10.8.4

  • psql(PostgreSQL)9.2.4

任何帮助表示赞赏。

我也试图通过自制程序安装PostgreSql,我得到同样的问题。 我还阅读了应用程序文档页面,其中指出:

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

所以它似乎应用程序不创build$ USER,但我已经安装 – >卸载 – 现在几次重新安装,所以它必须是我的机器的东西。

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

 psql -d template1 

我会留下这个没有答案,直到有人可以提供解释为什么这个工程。

看来您的软件包pipe理器无法为您创build名为$ user的数据库。 之所以这样

 psql -d template1 

为你工作的是,template1是由postgres自己创build的数据库,并在所有安装。 你显然能够login到template1,所以你必须有一些权利分配给你的数据库。 在shell提示下试试这个:

 createdb 

然后看看你是否可以再次login

 psql -h localhost 

这将简单地为您的login用户创build一个数据库,我认为这是您正在寻找的。 如果createdb失败,那么你没有足够的权利来创build自己的数据库,你将不得不弄清楚如何修复自制软件包。

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

 psql -U Username DatabaseName 

只需在命令提示符窗口中运行命令。 (不在psql中)。

 createdb <user> 

然后尝试再次运行postgres。

  1. 以默认用户login: sudo -i -u postgres
  2. 创build新用户: createuser --interactive
  3. 当提示angular色名称时,inputlinux用户名,然后select是以超级用户问题。
  4. 仍以postgres用户身份login,创build一个数据库: createdb <username_from_step_3>
  5. 在命令提示符下input: psql ,确认错误消失。
  6. 输出应显示psql (xxx) Type "help" for help.

使用默认的template1数据库login:

 #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创build一个数据库:

 template1=# CREATE DATABASE gogasca WITH OWNER gogasca ENCODING 'UTF8'; CREATE DATABASE 

退出,然后再次login

 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) 

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

在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

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

 psql: FATAL: database "user" does not exist 

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

方法1

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

和types

  psql 

方法2:

 psql -d postgres 

由于这个问题是search结果中的第一个问题,为了避免重复标题,我将在这里为不同的问题提供一个不同的解决scheme。

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

 psql -d db_name -f query_file.sql 

正如createdb文档所述:

当数据存储区被初始化时,第一个数据库总是由initdb命令创build的…这个数据库被称为postgres。

因此,如果某些操作系统/ postgresql发行版做了不同的事情,肯定不是默认的/标准的(只是证实了openSUSE 13.1上的initdb创buildDB“postgres”,但不是“<user>”)。 长话短说, psql -d postgres有望在使用除“postgres”以外的用户时使用。

很明显,接受的答案,运行createdb创build一个像用户一样命名的数据库,也适用,但创build一个多余的数据库。

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

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

创build用户 – 交互postgres回答为超级用户

创build用户 – 交互式用户回答为超级用户

在使用homebrew安装postgresql之后,我仍然遇到上述问题 – 我在/ usr / bin之前将/ usr / local / bin放在我的path中解决了这个问题

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

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

首先,创build一个与当前使用情况相同的数据库会很有帮助,以防止在仅仅使用缺省数据库时创build新的表,而不显式地声明数据库的名称。

用您的用户名replace“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) 

这不会启动交互式控制台,它只是输出一个基于文本的表到terminal。

正如另一个答案所说,postgres总是被创build的,所以当你只想让控制台开始在其他数据库上工作时,你应该使用它作为你的故障安全数据库。 如果不存在,则列出数据库,然后使用其中的任何一个。

以类似的方式,从数据库中select表格:

 psql -d postgres -c "\dt;" 

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

为了完整性,我们也可以从表中select所有行:

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

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

即使返回零行,也会得到字段名称。

如果您的表格有十几行,或者您不确定,那么以行数开始以了解您的数据库中有多less数据会更有用:

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

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

不要说那个“1行”让你困惑,它只是代表查询返回了多less行,但是1行包含你想要的计数,在这个例子中是0。

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

如果在使用Capistrano部署Rails项目时出现此错误,则可能需要在远程服务器上创build数据库。

login到你的Ubuntu并运行:

 sudo -u postgres psql 

如果出现提示,请input您的postgres用户密码。 现在input:

 CREATE DATABASE dbname_production; 

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

通过input\q退出

这是最简单的解释 这是小问题。 只要打字

pgres

会导致这种回应。

 pgres <db_name> 

如果用户有访问数据库的权限,将会成功,没有错误。

人们可以进入导出的环境variables的细节,但这是不必要的。这是基本的,不能因任何其他原因失败。