PostgreSQL不能以“ createdb”作为超级用户创建数据库,但不会输出错误[重复]


100

我正在使用'postgres'超级用户重新安装Postgresql。通过以下方式登录:

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

没有错误,但尚未创建表。有任何想法吗?


Answers:


208

createdb是一个命令行实用程序,可以从bash而不是psql运行。要从psql创建数据库,请使用如下create database语句:

create database [databasename];

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


35
谢谢,我现在给自己打耳光。:)
Damien Roche 2012年

当然。简单点;)需要等待7分钟(显然)。再次感谢。
Damien Roche 2012年

35
别忘了在末尾添加分号..;
蒂莫西·道尔顿

4
那半科林赢了!
迈克尔·迪米特

1
谢谢!分号为我完成了工作。如此的渺小又改变生活;)
斯堪的纳维亚航空公司

75

晚会晚了,但是被接受的答案并不能解释为什么没有显示错误。由于这是Postgres新手经常碰到的东西,所以我想补充一下。


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


因为createdb database没有结尾; psql以为语句未完成并等待更多输入。提示从更改postgres=#postgres-#。我希望psql可以做一个极其微妙的更改(更“突出”)。

通过输入元命令\list,“当前” SQL语句将“中止”而不执行它。

如果以createdb结束,;则输出将为:

postgres => createdb foobar;
错误:“ createdb”或附近的语法错误
LINE 1:createdb foobar;
        ^
postgres =>

清楚地表明出了点问题。


3
哇,这确实是微妙而致命的。我遇到这个问题已经有一段时间了。第一次使用分号运行命令时,会收到错误消息,因为该命令createdb无效。但是,然后重复完全相同的命令,create database而不是createdb与分号一起重复,效果很好。
Glen Selle

1
@Helsing:这就是我写的内容,我只是解释了为什么即使无效也没有错误消息
a_horse_with_no_name

@a_horse_with_no_name是的,我误解了你的目的。也支持您的答案。
赫尔辛

3

我不久前处于这种情况。如果有人遇到这种情况,请考虑命令提示符显示postgres-#您可以通过简单地键入;和返回键来执行挂起的createdb命令。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.