Greenplum产品是基于流行的PostgreSQL之上开发,几乎所有的PostgreSQL客户端工具及PostgreSQL应用都能运行在Greenplum平台上。
PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言。并且,因为许可证的灵活,任何人都可以以任何目的免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。
【管理数据】
------关于GP中的并发控制------
不像传统数据库系统使用 lock机制 来做并发控制。
GP保证数据一致性使用 multiversion model (Multiversion Concurrency Control,MVCC)。
读不会阻塞写,写也不会阻塞读。
GP中Lock Modes
------插入数据------
单条或少量数据插入使用 INSERT命令
大批量数据插入使用外部表(CREATE EXTERNAL TABLE) 或 COPY 命令
(注: append-only表对批量载入的数据有做优化。单行插入不建议使用append-only表。)
INSERT SQL示例:
INSERT INTO products VALUES (1, 'Cheese', 9.99); --插入
INSERT INTO products VALUES (1, 'Cheese', 9.99); --指定列名
INSERT INTO films SELECT * FROM tmp_films WHERE date_prod < '2004-05-07'; --把1个表数据插入另一个表
INSERT INTO products (product_no, name, price) VALUES
(1, 'Cheese', 9.99),
(2, 'Bread', 1.99),
(3, 'Milk', 2.99); --单条sql插入多行数据
------更新数据------
GP中UPDATE的限制条件:
1. distribution key 不能被更新
2. mirror启动时,在update语句中不能使用STABLE 或 VOLATILE
3. 不支持RETURNING
UPDATE SQL示例:
UPDATE products SET price = 10 WHERE price = 5; --更新单行或多行数据
------删除数据------
GP中使用DETELE的限制条件:
1. mirror启动时,在delete语句中不能使用STABLE 或 VOLATILE
2. 不支持RETURNING
Truncate是不扫描table。
DETELE SQL示例:
DELETE FROM products WHERE price = 10; --根据where条件删除
DELETE FROM products; --删除表中所有数据
TRUNCATE mytable; --清空表
【事务】
BEGIN 或 START TRANSACTION --开启事务
END 或 COMMIT --结束事务
ROLLBACK --回滚
SAVEPOINT -- 分段提交或回滚事务
------事务隔离级别-------
4种事务隔离级别:
1. read committed (GP Default)
2. serializable
3. read uncommitted
4. repeatable read
更改事务隔离级别方法:
1. 当BEGIN开始事务的时候,申明事务隔离级别
2. SET TRANSACTION
【整理数据库】
数据库有大量删除和修改的话,需要定期清理数据库。
使用VACUUM命令来做清理。
如:
VACUUM mytable; --清理无用的记录
VACUUM命令也进行表级的统计,例如:行数统计
一般在Load大量数据后,做一次VACUUM(含append-only table)
注: GP中不推荐使用 VACUUM FULL。
free space map中保存着无用的记录,空间必须保证足够大已用来存放数据。
修改以下2个参数:
max_fsm_pages
max_fsm_relations