Postgreql 没有使用“ createdb”作为超级用户创建 db,但是没有输出错误

我正在使用一个全新的 postgreql 安装程序,使用的是‘ postgres’超级用户:

sudo -u postgres psql




postgres=# createdb database
postgres-# \list
List of databases
Name    |  Owner   | Encoding |  Collation  |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
postgres  | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 |
template0 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres
: postgres=CTc/postgres
template1 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres
: postgres=CTc/postgres

没有错误,但是没有创建表。有什么想法吗?

92650 次浏览

createdb是一个命令行实用程序,您可以从 Bash而不是从 psql 运行它。 要从 Psql创建数据库,可以像下面这样使用 create database语句:

create database [databasename];

注意: 确保始终以 ;结束 SQL 语句

参加聚会迟到了,但是接受的答案并没有解释为什么没有显示错误。由于这是 Postgres 的新人经常会碰到的事情,我想补充一点。


TL/TR: 始终以 ;结束 SQL 语句


因为 createdb database没有以 ;psql结束,所以认为语句没有完成,并等待更多的输入。这通过提示符从 postgres=#变为 postgres-#来表示。一个非常微妙的变化,我希望 psql会做不同(更“突出”)。

通过输入元命令 \list,“当前”SQL 语句在没有执行的情况下被“中止”。

如果 createdb;结束,那么输出应该是:

postgres=> createdb foobar;
ERROR:  syntax error at or near "createdb"
LINE 1: createdb foobar;
^
postgres=>

清楚地表明事情不对劲。

我不久前也遇到过这种情况。如果其他人遇到这种情况,考虑到命令提示符显示 postgres-#,只需键入 ;和返回键即可执行挂起的 createdb 命令。

在 PostgreSQL 中创建新数据库非常简单,在 Linux 上执行以下命令(CentOS 7示例) :

sudo -u postgres psql -c "create database MyDb;"

使用节点终端,我必须运行:

psql -U postgres

[输入密码]

然后..。

CREATE DATABASE dbadmin;

令人困惑的是,我之前输入了这些相同的命令,但它不起作用。只有在注销并重新登录之后,我才能够从文档中使用这个标准命令: https://www.postgresql.org/docs/10/tutorial-createdb.html