我使用的是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
我不回答这个问题,直到有人能解释为什么这样做。
如果将环境变量PGDATABASE设置为不存在的数据库的名称,也会发生此错误。
在OSX上,当我试图从Postgress启动psql时,我看到了以下错误。应用程序菜单:
psql: FATAL:数据库“otherdb”不存在
该错误的解决方案是从~/.bash_profile中删除export PGDATABASE=otherdb:
此外,如果PGUSER被设置为您的用户名以外的其他东西,将发生以下错误:
psql: FATAL:角色“note”不存在
解决方案是从~/.bash_profile中删除export PGUSER=notme。
使用默认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)
首先,创建一个与当前使用的数据库名称相同的数据库是很有帮助的,这可以防止在您只想使用默认数据库并创建新表而不显式声明数据库名称时出现错误。
用你的用户名替换“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。
注意:未定义所有者的数据库将由当前用户拥有。
正在docker中运行postgres。在cli中,我得到的错误是“根”角色不存在。
关于我们- postgres
psql
解决了问题。
PostgreSQL在系统上有自己的用户,该用户是在安装PostgreSQL时创建的。postgres用户无需密码即可登录PostgreSQL。没有其他用户能够登录PostgreSQL。
这意味着在使用PostgreSQL之前,你需要使用以下命令切换到该用户帐户:
Su - postgres
然后你可以用下面的命令登录到PosgreSQL客户端:
psql
您将无法作为任何其他用户从命令行访问数据库。