我正在使用适用于 mac (http://postgresapp.com/) 的 PostgreSql 应用程序。我过去曾在其他机器上使用过它,但在我的 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
在有人可以解释为什么这样做之前,我将不回答这个问题。
psql -d postgres -U postgres -h localhost
显示什么?没有标志,它默认为 CLI 用户,我会说它默认为“postgres”管理数据库,但我没有要测试的 mac。
createdb <user>
对我有用。
psql -U user -d postgres
运行,这可以确保用户连接到已经存在的 postgres 数据库。所以我们在登录时也需要传递数据库。
您的包管理器似乎未能为您创建名为 $user 的数据库。原因是
psql -d template1
对你有用的是 template1 是一个由 postgres 自己创建的数据库,并且存在于所有安装中。您显然能够登录到 template1,因此您必须拥有数据库分配给您的一些权限。在 shell 提示符下试试这个:
createdb
然后看看你是否可以再次登录
psql -h localhost
这将为您的登录用户创建一个数据库,我认为这就是您正在寻找的。如果 createdb 失败,那么您没有足够的权限来创建自己的数据库,您将不得不弄清楚如何修复 homebrew 包。
从终端,只需在命令提示符窗口中运行命令。 (不在 psql 内)。
createdb <user>
然后尝试再次运行 postgres。
createdb
createdb: error: database creation failed: ERROR: permission denied to create database
默认情况下,postgres 尝试连接到与您的用户同名的数据库。为了防止这种默认行为,只需指定用户和数据库:
psql -U Username DatabaseName
psql -U Username -f create_db.sql
这将返回错误:database Username doesn't exists
psql -U Username postgres
当您还没有数据库时
以默认用户身份登录:sudo -i -u postgres 创建新用户:createuser --interactive 当提示输入角色名称时,输入 linux 用户名,然后选择是超级用户问题。仍然以 postgres 用户身份登录,创建一个数据库: createdb
sudo
权限的 Linux 帐户中运行此命令:sudo -u <username> createdb <dbname>
使用默认 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)
当我尝试在 mac 上打开 postgresql 时遇到了同样的错误
psql: FATAL: database "user" does not exist
我找到了这个简单的命令来解决它:
方法1
$ createdb --owner=postgres --encoding=utf8 user
并输入
psql
方法二:
psql -d postgres
postgres 安装后,在我的情况下,版本是 12.2,我确实运行了以下命令 createdb
。
$ createdb `whoami`
$ psql
psql (12.2)
Type "help" for help.
macuser=#
尝试使用-
psql -d postgres
我在运行 psql
时也遇到了同样的问题
步骤1:
psql -d template1
现在你应该在 psql 终端上
第2步:
CREATE DATABASE username;
确保在数据库名称后使用分号 (;);
可选:在 psql 终端上输入 \ls
或 \l
以列出所有数据库;
第 3 步:
psql -h localhost
现在您应该已连接;
有同样的问题,一个简单的 psql -d postgres
做到了(在终端中输入命令)
如果环境变量 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
。
不确定它是否已经添加到答案中,Anatolii Stepaniuk 的回答非常有帮助,如下所示。
psql -U Username postgres # when you have no databases yet
由于这个问题是搜索结果中的第一个问题,所以无论如何我都会在这里针对不同的问题提出不同的解决方案,以免出现重复的标题。
在 psql
中运行查询文件而不指定数据库时,可能会出现相同的错误消息。由于 postgresql 中没有 use
语句,所以我们必须在命令行中指定数据库,例如:
psql -d db_name -f query_file.sql
正如 createdb documentation 所述:
第一个数据库总是在初始化数据存储区时由initdb命令创建的……这个数据库叫做postgres。
因此,如果某些 OS/postgresql 发行版的做法不同,那肯定不是默认/标准(刚刚验证了 openSUSE 13.1 上的 initdb
创建了数据库“postgres”,而不是“<user>”)。长话短说,当使用“postgres”以外的用户时,预计将使用 psql -d postgres
。
显然,接受的答案是运行 createdb
以创建一个以用户命名的数据库,也可以正常工作,但会创建一个多余的数据库。
首先,创建一个与您当前使用的名称相同的数据库很有帮助,以防止当您只想使用默认数据库并创建新表而不显式声明数据库名称时出现错误。
将“skynotify”替换为您的用户名:
psql -d postgres -c "CREATE DATABASE skynotify ENCODING 'UTF-8';"
-d 显式声明在此交互式会话期间未显式包含数据库名称的 SQL 语句将哪个数据库用作默认数据库。
清楚了解您的 PostgresSQL 服务器中包含的内容的基础知识。
您必须连接到现有数据库才能以交互方式使用 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。
注意:在没有定义所有者的情况下创建的数据库将归当前用户所有。
使用 JDBC 驱动程序有问题,因此只需在 URL 中的主机名之后添加数据库(可能是多余的,具体取决于您可能使用的工具),例如 jdbc:postgres://<host(:port)>/<db-name>
此处记录了更多详细信息:http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT
通过现有的超级用户连接到 postgres。
通过您连接到 postgres 的用户名创建一个数据库。
create database username;
现在尝试通过用户名连接
解决此问题时,这对我有用
我运行 sudo -i -u postgress --> 来访问我的 postgres 数据库。
然后输入您的密码。
它现在允许您输入 psql ,这会提示您输入其他命令
干杯!
通过自制软件安装 postgresql 时出现此问题。
必须使用以下命令创建默认的“postgres”超级用户:
createuser --interactive postgres 为超级用户回答 y createuser --interactive user 为超级用户回答 y
您可以在环境变量 PGDATABASE=database_name 中设置要连接的数据库名称。如果您不设置此 psql 默认数据库名称为用户名。设置后,您不必创建b
在docker中运行postgres。在 cli 中,我收到错误“root”角色不存在。
su - postgres
psql
解决了这个问题。
PostgreSQL 在安装 PostgreSQL 时创建的系统上有自己的用户。 postgres 用户无需使用密码即可登录 PostgreSQL。没有其他用户能够登录 PostgreSQL。
这意味着在使用 PostgreSQL 之前,您需要使用以下命令切换到该用户帐户:
su - postgres 然后您将能够使用以下命令登录 PosgreSQL 客户端:
psql 您将无法像任何其他用户一样从命令行访问数据库。
使用自制软件安装 postgresql 后,我仍然遇到上述问题 - 我通过将 /usr/local/bin 放在 /usr/bin 之前的路径中解决了这个问题
这是一个基本的误解。只需键入:
pgres
将导致此响应:
pgres <db_name>
如果用户具有访问数据库的权限,它将成功而不会出错。
可以深入了解导出的环境变量的详细信息,但这是不必要的.. 这太基本了,不会因为任何其他原因而失败。
pgres
不定期副业成功案例分享
$ createdb -h localhost
来解决错误could not connect to database postgres: could not connect to server
。之后我可以通过psql -h localhost
连接到 postgresql 控制台。-d template1
吗?我在互联网上的教程中看到过“template1”,但这只会让我感到困惑。在我看来,更合乎逻辑的方法是 1)创建 PostgreSQL 用户,例如“usera” 2)创建一个与用户“usera”同名的数据库(我认为这很疯狂,但似乎 PostgreSQL 需要它)3)以超级用户“postgres”登录 PostgreSQL,并将数据库“usera”的权限分配给用户“usera”(天哪,这真的是现实生活吗?)psql -d postgres
似乎更值得一些支持。