问题描述
按照PG14的创建业务用户和业务数据库时提示如下报错:
--登录数据库 注意显示的是PG10.22版本
[root@ecs-c9d0-159 ~]# su - postgres
Last login: Sun Jun 30 16:05:36 CST 2024 on pts/2
-bash-4.2$ psql
psql (10.22)
Type "help" for help.
--创建业务用户
create user drugtopcsp with encrypted password '123456';
--创建业务数据库
postgres=> create database drugtopcsp owner drugtopcsp;
ERROR: must be member of role "drugtopcsp"
分析过程
创建用户的时候会自动生成一个同名的角色
--查看用户
meatopcsp=# \du+ drugtopcsp
List of roles
Role name | Attributes | Member of | Description
------------+------------+-----------+-------------
drugtopcsp | Create DB | {} |
解决办法
--将角色授权给postgres用户
grant drugtopcsp to postgres;
--查看
postgres=> \du+ postgres
List of roles
Role name | Attributes | Member of | Description
-----------+-------------------------------------------------+--------------------------------------------+-------------
postgres | Create role, Create DB, Replication, Bypass RLS | {drugtopcsp,cosmtopcsp,meatopcsp,yjsjzhzl} |
--创建数据库时指定属主 创建成功
postgres=> create database drugtopcsp owner drugtopcsp;
CREATE DATABASE
补充
PG10创建业务用户和数据库语句
create user drugtopcsp with encrypted password '123456';
grant cosmtopcsp to postgres;
create database drugtopcsp owner drugtopcsp;
grant all privileges on database drugtopcsp to drugtopcsp;
grant all privileges on all tables in schema public to drugtopcsp;
PG14创建业务用户和数据库语句
create user drugtopcsp with encrypted password '123456';
create database drugtopcsp owner drugtopcsp;
grant all privileges on database drugtopcsp to drugtopcsp;
grant all privileges on all tables in schema public to drugtopcsp;
二者区别在于:创建业务用户和数据库语句时,版本PG10比版本PG14多一条将角色授予创建数据库用户的sql。