【无标题】

Postgresql用户组、用户
在postgre8.0版本之后,用户user和用户组group的生成被create role语句同意起来了,但是为了兼容,也保留了create user和create group语句。

当initdb后,postgre默认生成了一个超级role用户:postgres,在操作数据库之前应该用postgres登录数据库,为数据库建立一些用户和用户组。

用户(user role)

create role fu login password '111' createdb;

以上语句生成了一个名为fu的用户,可以用这个用户名登录,登录密码为111,这个用户可以自行建立database。

用户名默认一直有效,但也可以为用户名指定有效期:

#默认设置
create role fu login password '111' createdb valid until 'infinity';

#指定有效期
create role fu login password '111' createdb valid until '2050-05-05 05:05';

用户组(group role)
用户组通常是那些没有login权限,但是有其他role作为成员的role。当然,这只是一个约定,不是强制的,你也可以创建一个既能登录也包含其他role成员的用户组,但是通常不会这么做。

#生成一个group role
create role fugroup inherit;

#添加其他用户或组
grant fugroup to fu;
#修改命令。官方要求修改max_connections的同时,同步修改max_prepared_transactions。
[gpadmin@mdw ~]$ gpconfig -c max_connections -v 1500 -m 500
[gpadmin@mdw ~]$ gpconfig -c max_prepared_transactions -v 500
#修改完参数后重启数据库生效
[gpadmin@mdw ~]$ gpstop -u
#查看max_connections
[gpadmin@mdw ~]$ gpconfig -s max_connections
Values on all segments are consistent
GUC          : max_connections
Master  value: 250
Segment value: 750
#查看max_prepared_transactions
[gpadmin@mdw ~]$ gpconfig -s max_prepared_transactions
Values on all segments are consistent
GUC          : max_prepared_transactions
Master  value: 250
Segment value: 250
#创建用户app_wsa_etl
gpdw=# create user app_wsa_etl;

正文

1. role

CREATE ROLE test_role WITH LOGIN PASSWORD 'test_role`;

2. filespace

2.1 tablespace

CREATE TABLESPACE test_tablespace OWNER test_role LOCATION '/opt/greenplum';

3. database

在Greenplum中:
1)无法使用未授权的用户创建数据库。(无所谓在哪个role下创建database,database对每一个role都可见???)

#问题:未给test_role授权CREATEDB,因此在test_role下创建test_database被拒绝。
[gpadmin@mdw gpseg-1]$ psql -h mdw -p 5432 -d gpdw -Utest_role
Password for user test_role: 
psql (9.4.24)
Type "help" for help.
gpdw=> \c
You are now connected to database "gpdw" as user "test_role".

gpdw=> CREATE DATABASE test_database;
ERROR:  permission denied to create database


#解决办法:用具备CREATEDB权限的ROLE去CREATE DATABASE即可。
#1.在gpadmin下CREATE DATABASE(gpadmin默认有CREATEDB权限)
[gpadmin@mdw gpseg-1]$ psql
psql (9.4.24)
Type "help" for help.
gpdw=# \c
You are now connected to database "gpdw" as user "gpadmin".

gpdw=# CREATE DATABASE test_database;
CREATE DATABASE

#2.在gpadmin下给普通用户赋权CREATEDB,在普通用户下CREATE DATABASE
[gpadmin@mdw gpseg-1]$ psql
psql (9.4.24)
Type "help" for help.
gpdw=# \c
You are now connected to database "gpdw" as user "gpadmin".

gpdw=# ALTER ROLE test_role CREATEDB;
ALTER ROLE

[gpadmin@mdw gpseg-1]$ psql -h mdw -p 5432 -d gpdw -Utest_role
Password for user test_role: 
psql (9.4.24)
Type "help" for help.
gpdw=> \c
You are now connected to database "gpdw" as user "test_role".

gpdw=> CREATE DATABASE test_database;
CREATE DATABASE


#查看数据库
gpdw=> \l
                                  List of databases

     Name      |   Owner   | Encoding |  Collate   |   Ctype    |  Access privileges  
---------------+-----------+----------+------------+------------+---------------------
 gpdw          | gpadmin   | UTF8     | en_US.utf8 | en_US.utf8 | 
 postgres      | gpadmin   | UTF8     | en_US.utf8 | en_US.utf8 | 
 test_database | test_role | UTF8     | en_US.utf8 | en_US.utf8 | 
(3 rows)

#登录数据库
[gpadmin@mdw gpseg-1]$  psql -h mdw -p 5432 -d test_database -Utest_role;
Password for user test_role: 
psql (9.4.24)
Type "help" for help.

test_database=> \c
You are now connected to database "test_database" as user "test_role".

#删除数据库

#在DROP DATABASE之前需要确保没有sessions 在using the database.
(还未测试)DROP DATABASE test_database;

3.1 schema

在Greenplum中:
1)一个database下可以有多个schema,一个schema只属于一个database;
2)不同的database之间schema没有关系,可以重名。

# 创建schema之前需要登录指定的数据库,创建的schema隶属该数据库。
[gpadmin@mdw gpseg-1]$ psql -h mdw -p 5432 -d test_database
psql (9.4.24)
Type "help" for help.

test_database=> CREATE SCHEMA test_schema;
CREATE SCHEMA


# 查看当前database下的schema
# 命令一:SELECT nspname FROM pg_namespace;
# 命令二:\dnS或者\dns
test_database=> SELECT nspname FROM pg_namespace;
test_database=> \dnS
test_database=> \dns

#删除schema只能在schema隶属的数据库下删除
test_database=> DROP SCHEMA test_schema;
DROP SCHEMA

附笔记

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值