Bootstrap

【无标题】

问题描述

按照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。

参考链接:PG修改表owner提示must be member of role “pg13“-CSDN博客

;