GreenPlum数据库创建用户、文件空间、表空间、数据库
1、创建数据库 -E 数据库字符集
[gpadmin@master ~]$ createdb GP -E utf-8
2、创建用户
[gpadmin@master ~]$ psql -d PG
psql (8.2.15)
Type "help" for help.
PG=# create role dbdream password 'dbdream' createdb login;
NOTICE: resource queue required -- using default resource queue "pg_default"
CREATE ROLE
通常创建用户,赋予login权限基本就够用了,创建用户的语法可以通过/h create role命令来查看,这里不做记录了。可以通过pg_roles字典开查看数据库的用户信息。
PG=> /h create role
Command: CREATE ROLE
Description: define a new database role
Syntax:
CREATE ROLE name [[WITH] option [ ... ]]
where option can be:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| CREATEEXTTABLE | NOCREATEEXTTABLE
[ ( attribute='value'[, ...] ) ]
where attributes and values are:
type='readable'|'writable'
protocol='gpfdist'|'http'|'gphdfs'
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| CONNECTION LIMIT connlimit
| [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
| VALID UNTIL 'timestamp'
| IN ROLE rolename [, ...]
| ROLE rolename [, ...]
| ADMIN rolename [, ...]
| RESOURCE QUEUE queue_name
PG=# select rolname,oid from pg_roles;
rolname | oid
---------+-------
gpadmin | 10
ccdba | 17195
(2 rows)
3、创建完用户后,还需要修改pg_hba.conf文件,来赋予用户的远程登录权限。
[gpadmin@master gpseg-1]$ pwd
/data/master/gpseg-1
[gpadmin@master gpseg-1]$ vi pg_hba.conf
增加以下内容
host all dbdream 172.16.10.21/32 md5
通过gpstop -u命令重新加载配置文件(不关闭系统,重新载入更改的配置文件),使之生效后,ccdba用户即可远程访问数据库了。
[gpadmin@master gpseg-1]$ gpstop -u
20181030:10:14:08:015076 gpstop:master:gpadmin-[INFO]:-Starting gpstop with args: -u
20181030:10:14:08:015076 gpstop:master:gpadmin-[INFO]:-Gathering information and validating the environment...
20181030:10:14:08:015076 gpstop:master:gpadmin-[INFO]:-Obtaining Greenplum Master catalog information
20181030:10:14:08:015076 gpstop:master:gpadmin-[INFO]:-Obtaining Segment details from master...
20181030:10:14:08:015076 gpstop:master:gpadmin-[INFO]:-Greenplum Version: 'postgres (Greenplum Database) 4.3.7.3 build 2'
20181030:10:14:08:015076 gpstop:master:gpadmin-[INFO]:-Signalling all postmaster processes to reload
...
[gpadmin@master gpseg-1]$ psql -d PG -U ccdba -h 172.16.10.21 -p 5432
Password for user ccdba:
psql (8.2.15)
Type "help" for help.
可以使用/c命令或者/conninfo命令来查看当前的登录信息。
PG=> /c
You are now connected to database "PG" as user "ccdba".
PG=>
3、创建表空间需要先创建文件空间,文件空间是在操作系统层创建,创建文件控制需要指定已存在的目录,通常需要规划并创建目录。Master和所有Segment节点都需要创建。可以使用下面的命令查看当前数据库的表空间和文件空间对应关系。
PG=> select a.spcname,b.fsname from pg_tablespace a,pg_filespace b where spcfsoid=b.oid;
spcname | fsname
------------+-----------
pg_default | pg_system
pg_global | pg_system
(2 rows)
当前数据库只有pg_segment一个文件空间,上面有pg_default和pg_global两个表空间 。
下面先创建Master节点的目录
[gpadmin@master data]$ mkdir -p /data/gpdata/fspc_master
注意:有Standby节点也需要手工创建
[root@standby ~]# su - gpadmin
[gpadmin@standby ~]$ mkdir -p /data/gpdata/fspc_master
[gpadmin@standby ~]$
然后在Master节点通过gpssh命令创建Segment节点的目录以及对应的Mirror镜像目录
[gpadmin@master data]$ gpssh -f /gp/conf/seg_host -e 'mkdir -p /data/gpdata/fspc_segment'
[gpl2] mkdir -p /data/gpdata/fspc_segment
[gpl1] mkdir -p /data/gpdata/fspc_segment
[gpl3] mkdir -p /data/gpdata/fspc_segment
[gpadmin@master ~]$ gpssh -f /gp/conf/seg_host -e 'mkdir -p /data/gpdatamirror/fspc_segment'
[gpl1] mkdir -p /data/gpdatamirror/fspc_segment
[gpl3] mkdir -p /data/gpdatamirror/fspc_segment
[gpl2] mkdir -p /data/gpdatamirror/fspc_segment
创建完目录后,可以通过gpfilespace命令创建文件空间
[gpadmin@master data]$ gpfilespace
20181030:10:26:55:015514 gpfilespace:master:gpadmin-[INFO]:-
A tablespace requires a file system location to store its database
files. A filespace is a collection of file system locations for all components
in a Greenplum system (primary segment, mirror segment and master instances).
Once a filespace is created, it can be used by one or more tablespaces.
20181030:10:26:56:015514 gpfilespace:master:gpadmin-[INFO]:-getting config
Enter a name for this filespace // 输入表空间的名字,名字随便起,但是不能使用gp_开头
> fspc1
Checking your configuration:
Your system has 3 hosts with 3 primary and 3 mirror segments per host.
Your system has 2 hosts with 0 primary and 0 mirror segments per host.
Configuring hosts: [gpl1, gpl3, gpl2]
Please specify 3 locations for the primary segments, one per line: // Primary Segment节点目录
primary location 1> /data/gpdata/fspc_segment
primary location 2> /data/gpdata/fspc_segment
primary location 3> /data/gpdata/fspc_segment
Please specify 3 locations for the mirror segments, one per line: // Mirror Segment节点目录
mirror location 1> /data/gpdatamirror/fspc_segment
mirror location 2> /data/gpdatamirror/fspc_segment
mirror location 3> /data/gpdatamirror/fspc_segment
Configuring hosts: [standby, master]
Enter a file system location for the master
master location> /data/gpdata/fspc_master // Master以及Standby节点目录
20181030:10:29:47:015514 gpfilespace:master:gpadmin-[INFO]:-Creating configuration file...
20181030:10:29:47:015514 gpfilespace:master:gpadmin-[INFO]:-[created]
20181030:10:29:47:015514 gpfilespace:master:gpadmin-[INFO]:-
To add this filespace to the database please run the command:
gpfilespace --config /data/gpfilespace_config_20181030_102657
gpfilespace命令执行完成后,会生成一个配置文件,也就是上面的最后一行,gpfilespace --config /data/gpfilespace_config_20181030_102657,查看这个文件的内容会发现,上面的gpfilespace命令其实只是创建了文件空间的配置信息,并没有真正创建文件空间
[gpadmin@master data]$ cat /data/gpfilespace_config_20181030_102657
filespace:fspc1
master:1:/data/gpdata/fspc_master/gpseg-1
standby:20:/data/gpdata/fspc_master/gpseg-1
gpl1:2:/data/gpdata/fspc_segment/gpseg0
gpl1:3:/data/gpdata/fspc_segment/gpseg1
gpl1:4:/data/gpdata/fspc_segment/gpseg2
gpl1:17:/data/gpdatamirror/fspc_segment/gpseg6
gpl1:18:/data/gpdatamirror/fspc_segment/gpseg7
gpl1:19:/data/gpdatamirror/fspc_segment/gpseg8
gpl3:8:/data/gpdata/fspc_segment/gpseg6
gpl3:9:/data/gpdata/fspc_segment/gpseg7
gpl3:10:/data/gpdata/fspc_segment/gpseg8
gpl3:14:/data/gpdatamirror/fspc_segment/gpseg3
gpl3:15:/data/gpdatamirror/fspc_segment/gpseg4
gpl3:16:/data/gpdatamirror/fspc_segment/gpseg5
gpl2:5:/data/gpdata/fspc_segment/gpseg3
gpl2:6:/data/gpdata/fspc_segment/gpseg4
gpl2:7:/data/gpdata/fspc_segment/gpseg5
gpl2:11:/data/gpdatamirror/fspc_segment/gpseg0
gpl2:12:/data/gpdatamirror/fspc_segment/gpseg1
gpl2:13:/data/gpdatamirror/fspc_segment/gpseg2
这个文件可以自己创建并修改,真正创建文件空间需要运行刚才gpfilespace命令后的最后一行
[gpadmin@master data]$ gpfilespace --config /data/gpfilespace_config_20181030_102657
20181030:10:33:32:015759 gpfilespace:master:gpadmin-[INFO]:-
A tablespace requires a file system location to store its database
files. A filespace is a collection of file system locations for all components
in a Greenplum system (primary segment, mirror segment and master instances).
Once a filespace is created, it can be used by one or more tablespaces.
20181030:10:33:33:015759 gpfilespace:master:gpadmin-[INFO]:-getting config
Reading Configuration file: '/data/gpfilespace_config_20181030_102657'
20181030:10:33:34:015759 gpfilespace:master:gpadmin-[INFO]:-Performing validation on paths
..............................................................................
20181030:10:33:34:015759 gpfilespace:master:gpadmin-[INFO]:-Connecting to database
20181030:10:33:36:015759 gpfilespace:master:gpadmin-[INFO]:-Filespace "fspc1" successfully created
这样才是真正创建完成文件空间,才能在数据库中查询到新建的文件空间信息
[gpadmin@master data]$ psql -d PG -U ccdba -h 172.16.10.21 -p 5432
Password for user ccdba:
psql (8.2.15)
Type "help" for help.
PG=> select * from pg_filespace;
fsname | fsowner
-----------+---------
pg_system | 10
fspc1 | 10
创建完文件空间,即可在文件空间上创建表空间,创建表空间必须使用support权限用户。
非support权限用户要使用新建的表空间,必须要使用support用户对其授予操作权限才可以,否则会遇到下面的错误
PG=> create tablespace tbs1 filespace fspc1;
ERROR: permission denied to create tablespace "tbs1"
HINT: Must be superuser to create a tablespace.
切换gpamin用户
PG=> /c PG gpadmin
You are now connected to database "PG" as user "gpadmin".
PG=# create tablespace tbs1 filespace fspc1;
CREATE TABLESPACE
PG=#
要使用户默认就使用新建的表空间,需要设置用户的默认表空间。
PG=# alter role ccdba set default_tablespace='tbs1';
ALTER ROLE
PG=#
授权后,即可使用新建的表空间(授权yonghuccdba在tbs1表空间的所有操作并且授权ccdba用户在数据库PG上所有操作)
PG=> /c PG gpadmin
You are now connected to database "PG" as user "gpadmin".
PG=# grant all on tablespace tbs1 to ccdba;
GRANT
PG=# grant all on database "PG" to ccdba;
GRANT
创建测试表,并且查看到默认表空间为tbs1
PG=> create table t_test(id int,name varchar(10)) DISTRIBUTED BY(id);
CREATE TABLE
PG=> /d t_test
Table "public.t_test"
Column | Type | Modifiers
--------+-----------------------+-----------
id | integer |
name | character varying(10) |
Distributed by: (id)
Tablespace: "tbs1"
PG=> /c
You are now connected to database "PG" as user "ccdba".
PG=>
4、具有createdb权限的用户,都可以创建数据库了,语法可以通过/h create database命令来查看,非常简单。比如下面这条命令就可以创建一个数据库。
postgres=> create database dbdream;
CREATE DATABASE
也可以在创建数据库时,指定数据库使用的默认表空间。
dbdream=# create database tt tablespace tbs1;
CREATE DATABASE
创建数据库的用户必须要有createdb权限或者support用户权限,这也是之前创建用户是为什么直接赋予了createdb权限,可以通过pg_database字典来查看数据库信息。
1
dbdream=# select datname,datdba,dattablespace from pg_database;
2
datname | datdba | dattablespace |
3
-----------+--------+----------------+
4
dbdream | 17197 | 1663 |
5
postgres | 10 | 1663 |
6
tt | 10 | 17199 |
7
template1 | 10 | 1663 |
8
template0 | 10 | 1663 |
9
(5 rows)
datdba字段表示的是数据库的所有者(创建者),这里存的是用户的oid,10是gpadmin用户,17191是dbdream用户,可以通过pg_role字典来查看。dattablespace字段表示的是表空间。存的也是表空间的ID,1663是pg_default表空间,17199是新建的tbs1表空间,可以通过pg_tablespace字典开查看。
版权声明:本文为博主原创文章,未经博主允许不得转载。



