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

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

首先,我运行:

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所有者身份创建,这可能是最明智的选择。
或者,您可以创建foouserDB 超级用户(绝对不推荐),或授予该用户权限CREATE DATABASE(也不推荐 - 您的个人数据库用户应该是普通用户,数据库所有者是他们应该拥有的最高权限。)


一般来说,我不建议使用 Postgres 命令行工具。它们没有什么问题,但我认为使用 SQL 命令行与数据库交互是更好的选择。
CREATE DATABASESQL 命令的文档在我看来,也比命令行等效的文档更好。

与您在命令上执行的操作等效的 SQL 如下:

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

相关内容