问题背景
笔者安装并配置完PostgreSQL后,试图在本地终端执行一系列SQL指令,包括创建数据库、查询数据等。然而,在第一步——创建数据库时就遇到了报错,让笔者十分摸不着头脑,网上对这一问题解决方法的介绍文章也较少,因此笔者在解决问题后在此记录,希望能与大家分享有用经验~
版本
PostgreSQL 14.14(Windows x86-64)
环境
- SQL SHELL
- 命令提示符cmd
报错详情
笔者首先启动了PG服务,并在PostgreSQL自带的命令行操作终端SQL SHELL里,通过连按四下回车的方式实现了默认登陆。随后便试图创建名为lab的数据库,命令和对应报错如下所示:
postgres=> CREATE DATABASE lab;
错误: 创建数据库权限不够
解决过程
首先参考了这篇文章,学习到可以用\du命令在这里的终端查看所有用户:
postgresql用户无建库权限的解决方式_高斯数据库没有建表权限-CSDN博客
如上图所示,笔者这里有两个用户,被马赛克掉的那个是电脑默认用户;还有一个是为postgreSQL创建的postgres用户、也是此处登录的用户(具体创建方式参考了文章:百度安全验证)
可见此处登录的postgres用户没有任何权限,经查阅资料,倘若该用户想要获取权限,需要让电脑默认用户授予该用户权限。
笔者便想到,那就让当前处于postgres用户的终端,切换到电脑默认用户并授权呗。
直接切换用户需要用以下命令:
SET ROLE {此处替换为电脑默认用户名};
然鹅,又遇到了报错——
错误: 设置角色"xxx"的权限不足
经查询,这是因为这个SET ROLE语句需要电脑默认用户这一超级用户才能执行,额。。。鄙人就是希望从普通用户转换到超级用户,但需要超级用户的权限,这不就死循环了莫/(ㄒoㄒ)/~~
成功解法(省流可直接跳转到此处hh)
还好本人灵机一动,想到另开一个终端直接用电脑默认用户登录试试看呢。于是新建一个cmd(不用SQL SHELL),在如下路径(注意一定要在这个地方输!!其他路径下识别不出psql命令)输入这段指令,以电脑默认用户登录:
D:\PostgreSQL\14\bin>psql -U {此处替换为电脑默认用户名} -d postgres
然后让此用户把创建数据库的权限CREATEDB授权给postgres:
postgres=# ALTER ROLE postgres WITH CREATEDB;
再查看一下当前所有用户,诶嘿,用户postgres有建库权限啦~~
最后,用postgres重新登录SQL SHELL,再次尝试用CREATE DATABASE语句创库,搞定!!大功告成~~