首先,我运行:
sudo su postgres
createuser -U postgres foouser -P
效果很好,然后我运行了:
createdb -U foouser -E utf8 -O foouser foodatabase -T template0
并收到“权限被拒绝:无法创建数据库”
首先,我是否应该像第一个su
那样postgres
执行操作(假设我的 postgres 数据目录归 拥有postgres
),或者-U postgres
来自任何用户(假设trust
在 中使用pg_hba.conf
)是否足够?
其次,为什么我会遇到此错误?这是因为用户foouser
不是超级用户吗?我应该foodatabase
使用postgres
用户并简单地创建-O foouser
吗?
答案1
您收到此错误是因为(正如您正确推测的那样)您foouser
不是超级用户,并且没有权限CREATE DATABASE
。
您可以以超级用户身份创建数据库postgres
,并以foouser
所有者身份创建,这可能是最明智的选择。
或者,您可以创建foouser
DB 超级用户(绝对不推荐),或授予该用户权限CREATE DATABASE
(也不推荐 - 您的个人数据库用户应该是普通用户,数据库所有者是他们应该拥有的最高权限。)
一般来说,我不建议使用 Postgres 命令行工具。它们没有什么问题,但我认为使用 SQL 命令行与数据库交互是更好的选择。
CREATE DATABASE
SQL 命令的文档在我看来,也比命令行等效的文档更好。
与您在命令上执行的操作等效的 SQL 如下:
CREATE DATABASE foodatabase WITH OWNER foouser ENCODING 'utf8' TEMPLATE template0;