启动数据库服务
gpstart,系统会自检,并提示是否启动服务,选择y,启动服务
gpstart -a 则系统无任何提示,进行启动
gpstart -q 如果不希望屏幕输出
gpstart -h 具体的选项帮助说明
ps -ef|grep postgre 查看相关的服务进程
如何关闭数据库服务
gpstop
gpstop -M fast 想强行关闭服务
gpstop -u  重启系统
该工具提供了-t选项,增加允许的超时设置。这对系统关闭时存在大量回滚数据的情况非常有用(过去的默认超时是60秒)
gpstop -h 获取选项帮助
gpstate -s 获取服务状态的细节信息
如何连接数据库。
我们可以通过任何装有psql客户端的机器连接GP数据库,比如
psql -d template1 -U gpadmin -p 5432 -h mdw
其中-d指定了连接数据库的名称,-U指定了连接数据库的用户名,也称为角色,-p指定了连接使用的端口,默认值是5432,-h指定了master对外服务的主机名。
新的4.1版本中,他可以支持application_name参数,从而使我们可以方便的对数据库连接定位,进行问题诊断和性能调整。
在系统初始化的过程中,系统会创建一个称为gpadmin的数据库角色(用户),做为超级管理员。默认可以使用它进行登录。我们也可以自己创建新的用户。
比如从master上,以gpadmin用户登录,这可以通过操作系统实现身份认证,不需要密码。
psql -d template1
建立新用户
template1=:>create role ods with password 'ods' login;
我们从客户端,使用新添加的客户登录,可能系统会拒绝登录,这是因为GP提供了类似防火墙的机制,需要我们在master上通过配置文件指定允许哪些客户端,哪些客户登入
哪些数据库。
首先,登入master主机,在数据目录下,找到配置文件pg_hba.conf,我们可以用vi打开,对其进行编辑,其内容类似下面的信息
local    all         gpadmin,ods         ident
host     all         gpadmin,ods         127.0.0.1/28    trust
host     all         gpadmin,ods         192.168.10.30/32       trust
host     all         gpadmin,ods         192.168.10.32/32       trust
host     all         all             192.168.10.0/24        md5
我们可以在里面添加新的条目,比如最后一个条目允许所有192.168.10.0/24网段登录的所有用户,可以通过密码方式进行身份审核,登录所有数据库。修改这个配置文件后,需要通过gpstop -u 去reload变化的内容,才能生效。
创建用户sh, 并赋予它登录系统和创建数据库的权限
su - gpadmin
gpadmin@mdw:~> psql -d template1
psql (8.2.15)
Type "help" for help.
template1=# create role sh with password 'sh' login createdb;
创建数据库的句法如下
CREATE DATABASE name [ [WITH] [OWNER [=] dbowner]
[TEMPLATE [=] template]
[ENCODING [=] encoding]
[TABLESPACE [=] tablespace]
[CONNECTION LIMIT [=] connlimit ] ]
最简单的只要给个数据库名字就好了。比如
template1=> create database sales_history;
CREATE DATABASE
接下来可以,连接到建好的数据库上创建schema,如果不创建自己的schema,在建库时系统创建了一个叫做public的schema。在GP中,如果要跨schema访问对象,
必须使用schema做前缀,比如schema.table的形式。如果不加前缀默认查找当前schema。
template1=> \c sales_history
You are now connected to database "sales_history" as user "sh".
sales_history=> create schema sales_history ;
CREATE SCHEMA
如果要永久改变schema的访问顺序,用下面的语句
sales_history=> alter database sales_history set search_path to sales_history,public;
ALTER DATABASE
如果是改变当前客户端的schema 访问顺序
sales_history=> set search_path to sales_history;
SET
下面就可以建表了,注意一下映射关系,一般oracle number数据类型对应gp的numeric类型,oracle date数据类型对应gp的timestamp类型,oracle varchar2数据类型对应gp的varchar类型,另外,GP在建表的时候,还应该指定数据的分布方法。一种是HASH
CREATE TABLE SALES
(    PROD_ID numeric NOT NULL ,
CUST_ID numeric NOT NULL ,
TIME_ID DATE NOT NULL ,
CHANNEL_ID numeric NOT NULL ,
PROMO_ID numeric NOT NULL ,
QUANTITY_SOLD numeric(10,2) NOT NULL ,
AMOUNT_SOLD numeric(10,2) NOT NULL )
distributed by (prod_id,cust_id,time_id,channel_id,promo_id);
创建对应的外部表,访问导出CSV文件。使用GP的外部表,需要先把gpfdist这个工具(默认路径/usr/local/greenplum-db/bin)拷贝到存放csv文件的文件服务器上。启动gpfdist服务(类似一个http服务),比如文件在/stage/data目录的子目录下,我们可以启动它
nohup gpfdist -d /stage  -p 8081 -l gpfdist.log &
另外,要允许用户创建外部表,非则建外部表时会得到错误
ERROR:  permission denied: no privilege to create a readable gpfdist external table
修改配置文件,添加参数
gp_external_enable_exec = on   # enable external tables with EXECUTE.
gp_external_grant_privileges = on #enable create http/gpfdist for non su's
允许非超级管理员创建外部表,必须重启数据库服务,才能生效。
下面是创建外部表的句法,可以使用*作为通配符指定特定目录下的多个文件,这些文件也可以分布到多个文件服务器上,以提高数据的加载效率。
create external table sales_ext
(PROD_ID numeric,
CUST_ID numeric,
TIME_ID date,
CHANNEL_ID numeric ,
PROMO_ID numeric ,
QUANTITY_SOLD numeric(10,2),
AMOUNT_SOLD numeric(10,2))
LOCATION ('gpfdist://elt1:8081/sales/*')
FORMAT 'CSV'
log errors into err_sales_ext segment reject limit 7000000 rows;
接下来就可以使用子查询加载数据了
sales_history=> insert into sales select * from sales_ext;
NOTICE:  Found 70681 data formatting errors (70681 or more input rows). Rejected related input data.
INSERT 0 918843
sales_history=> select * from err_sales_ext;
sales_history=> select count(*) from sales;
count
--------
918843
(1 row)
insert into sales select * from sales_ext;
对于有问题的记录,加载过程中会抛到定义外部表的时指定的错误表中。
与其它数据库一样,在加载大量数据后,应该收集表的统计信息
sales_history=> vacuum analyze sales;
VACUUM