为什么我的Postgres用户有权限添加Postgres数据库?

首先,我跑了:

sudo su postgres createuser -U postgres foouser -P 

哪些工作得很好,我跑了:

 createdb -U foouser -E utf8 -O foouser foodatabase -T template0 

并得到“权限被拒绝:无法创build数据库”

首先,我甚至应该像postgres一样做第一个操作(假设我的postgres数据目录由postgres拥有),或者是来自任何用户的-U postgres (假设trustpg_hba.conf )是否足够?

其次,为什么我会遇到这个错误? 这是因为用户foouser是一个非超级用户? 我应该使用postgres用户创buildfoodatabase ,并简单地-O foouser

您正在收到此错误,因为foouser不是超级用户,并且没有CREATE DATABASE权限。

您可以创build数据库作为您的postgres超级用户, foouser作为所有者,这可能是最理智的select。
或者你可以使用DB超级用户(绝对不推荐),或者授予用户CREATE DATABASE权限(也不是真的推荐 – 你的个人数据库用户应该是普通的普通用户,数据库所有者是他们应该拥有的最高级别的权限。 )


一般来说,我build议不要使用Postgres命令行工具。 他们没有什么问题,但是我认为使用SQL命令行与数据库进行交互是可取的。
关于CREATE DATABASE SQL命令的文档,恕我直言,比命令行文档也好。

相当于你正在做的命令的SQL就像是:

 CREATE DATABASE foodatabase WITH OWNER foouser ENCODING 'utf8' TEMPLATE template0;