前言
postgresql是一款开源的数据库,之后项目中会用到,这里记录下学习过程,数据库的学习和新语言的学习类似,由于都是数据库一般都是基于sql标准,所以只要有目的去测试即可,比如写个存储过程,或者使用一些特有的语法,新建个索引,看下sql执行计划等。
postgresql学习过程
1、新建表:
postgresql中的数据类型比较多,常用的和mysql中的类似,比如int,bigint,smallint。还有一些特殊的比如numeric,text, money等。
create table cz_test(
so_nbr integer not null default nextval('cz_test_seq'),
name text,
age numeric check(age > 2) default 4,
have_money money,
is_big boolean
);
2、新建序列
CREATE SEQUENCE cz_test_seq; -- 新建序列
drop sequence cz_test_seq; -- 删除序列
使用:
select nextval('cz_test_seq'); -- 获取自增值
select currval('cz_test_seq'); -- 获取当前值
select lastval(); -- 获取任意序列最近使用的值
自动创建序列
create table cz_test(
so_nbr SERIAL, -- 相当于CREATE SEQUENCE cz_test_seq;so_nbr integer not null default nextval('cz_test_seq'),
name text,
age numeric check(age > 2) default 4,
have_money money,
is_big boolean
);
使用效果
创建索引
创建索引的方式和mysql的没什么区别
CREATE INDEX cz_test_sonbr_index ON cz_test (so_nbr);
CREATE INDEX cz_test_sonbr_index ON cz_test (so_nbr) USING gin (locations) WITH (fastupdate = off); -- 指定索引
索引类型
哈希索引、B-树索引、GIST索引、GIN索引、BRIN索引。
查看执行计划
postgresql的执行计划和mysql有点区别,postgresql只会分析执行的耗时,并不会展示索引使用情况。
explain和explain analyze有什么区别?
explain是展示初略的执行执行计划。不会真实的执行语句。
explian analyze:
可以通过使用 EXPLAIN 的 ANALYZE 选项来检查规划器估计值的准确性。通过 使用这个选项, EXPLAIN 会实际执行该查询,然后显示真实的行计数和在每个 计划节点中累计的真实运行时间,还会有一个普通 EXPLAIN 显示的估计值。
explain select * from cz_test where so_nbr = 1;
explain analyze select * from cz_test where so_nbr = 1;
总结
看了一晚上,发现postgresql相对于oracle和mysql给人最大的感受就是灵活,更有活力,不像oracel那么“死板”,但是也不像mysql那样拥有插拔式的存储引擎。postgresql的这种灵活着重体现在服务层的灵活,比如数据结构更丰富,函数更多,但是存储层现在还没有深入的体会,不知道表现如何,这个还需要深入学习。