createdb: 数据库创建失败: ERROR: permission denied to create database
createdb: 数据库创建失败: ERROR: permission denied to create database
我对root用户,超级用户,用户和权限感到相当困惑!我无法在用户"athleticu"内创建数据库。以下是我使用的命令:-
athleticu@ip-172-30-4-103:/home/ubuntu$ createdb -T template0 simple_db1
createdb: 数据库创建失败:ERROR: 权限不足,无法创建数据库
athleticu@ip-172-30-4-103:/home/ubuntu$ sudo createdb -T template0 simple_db1
sudo: 无法解析主机 ip-172-30-4-103
createdb: 无法连接到数据库 template1:FATAL: 角色 "root" 不存在
请有人澄清我的疑惑,并告诉我应该写什么!
创建数据库失败的原因是权限不足。解决方法是使用具有超级用户权限的用户登录,并授予需要创建数据库的用户相应的权限。
首先,在 psql 中输入 \du 命令,可以查看所有注册用户及其权限类型的列表。为了给当前登录的用户(例如 'user1')授予权限,需要注销并使用列表中的超级用户角色之一(例如 'user2')重新登录。可以使用以下命令:
psql -U 'user2' -h localhost 'database2'
其中 'database2' 是具有特定超级用户 'user2' 权限的数据库的名称。
一旦以超级用户身份登录,可以通过以下命令为 'user1' 授予权限:
ALTER ROLE user1 WITH CREATEDB;
或者
ALTER ROLE user1 WITH SUPERUSER;
然后再次以 'user1' 用户身份登录,此时 'user1' 就成为了超级用户。
这篇博客(链接:https://jrcorner.wordpress.com/2013/10/09/troubleshooting-postgres-error-permission-denied-to-create-db/)以及这个链接(链接:https://dba.stackexchange.com/questions/1285/how-do-i-list-all-databases-and-tables-using-psql)也对解决该问题有所帮助。
对于我来说(版本 10.17),需要输入以下命令才能成功执行 ALTER ROLE:
ALTER ROLE "user1" WITH CREATEDB;
注意要使用引号和分号。
问题:createdb: database creation failed: ERROR: permission denied to create database
原因:用户没有创建数据库的权限。
解决方法:通过以下步骤修改用户权限。
1. 使用以下命令切换到postgres用户:
sudo su postgres
2. 进入PostgreSQL终端:
psql
3. 使用以下命令修改用户权限,将"username"替换为实际的用户名:
ALTER USER username WITH CREATEDB;
4. 退出PostgreSQL终端:
\q
5. 退出postgres用户:
exit
参考来源:alter role, alter user
从上面的内容中可以整理出以下问题的出现原因和解决方法:
问题:createdb: database creation failed: ERROR: permission denied to create database
出现原因:缺少创建数据库的权限
解决方法:使用以下步骤解决问题
1. 以postgres用户身份登录:
$ su postgres
2. 进入psql命令行界面:
$ psql
3. 执行以下命令,将用户权限修改为可以创建数据库:
postgres=# alter user athleticu createdb; ALTER ROLE
4. 退出psql命令行界面。
以上方法应该可以解决创建数据库失败的权限问题。如果在没有密码的情况下无法进入postgres用户,可以通过提升为root用户来解决:
sudo su postgres
需要注意的是,从postgresql 8.1版本开始,"ALTER USER"命令已经成为"ALTER ROLE"命令的别名。