7.基本ddl

1.schema
对象搜索路径默认为 search_path 
创建对象不指定schema时默认放到public下

1.1 创建
create schema schema1;
1.2 修改名称和拥有者
alter schema schema1 rename to schema2;
alter schema schema2 owner to current_user;

2.tablespace
2.1创建表空间
mkdir -p /home/postgres/tbs2
create tablespace tbs2 location '/home/postgres/tbs2';
2.2将表move到新的表空间
alter table t1 set tablespace tbs2;

3.table
3.1 建表
create table t1(id int primary key,name varchar(16));
3.2 根据现有表建表
create table t2 as select * from t1;
create table t3 like (like t1);--默认只有表结构类似于where 1=2
create table t4 (like t1 including all);
{ including | excluding } { comments | constraints | defaults | identity | indexes | statistics | storage | all }
3.3 定义缺省值和自增列
create table t5(id serial,gmt_time timestamp default now());
3.4 修改表
3.4.1 修改表名
alter table t1 rename to t10;
3.4.2 修改字段名
alter table t1 rename column id to id2;
3.4.3 增加/删除字段
alter table t1 add column c1 int;
alter table t1 drop column c1;
3.4.4 修改字段默认值
alter table t1 alter column name set default 'AAAA';
3.4.5 修改字段类型(注意,pg不做校验,数据会可能会失真
alter table t1 alter column name type varchar(8);
3.4.6 修改表的schema
alter table public.t1 set schema public;

4.constraints
主键/外键/唯一/非空/check
4.1建表时增加
create table t6(id int primary key,
                id_n int not null,
                id_u int,
                id_f int,
                id_c int check(id_c >0),
                unique(id_u),
                foreign key(id_f) references t1(id)
                );
4.2给现有表添加约束
alter table t2 add constraint pk_t2 primary key(id);

5.index
参考https://yq.aliyun.com/articles/111793
5.1 index type
btree  最常用,适合等值,范围,排序
bitmap 字段候选值很少,不适合dml频繁的表
hash   字段值很长的等值检索(也适用于降低索引热块争用)
gin    多值类型,如数组,JSON,多列任意组合等
gist和sp-gist 空间数据和范围数据
brin   block range index,存储连续相邻的block的统计信息(每次统计pages_per_range个block),适合流式数据,监控数据
rum    多字段任意组合,多值查询、全文检索、相似查询
bloom  多列任意组合查询
zombodb 提供ElasticSearch接口
function  各种表达式以及条件索引
5.2 create index
5.2.1 创建索引
create index idx_t1_1 on t1(id);
5.2.2 在线创建索引
create index concurrently idx_t1_2 on t1(id);--类似于oracle online,不堵塞dml
5.2.3 降序索引(默认升序)
create index concurrently idx_t1_3 on t1(id desc,name asc);
5.2.4 删除索引
drop index idx_t1_1;
5.2.5 唯一索引
create unique index idx_t1_4 on t1(id);
5.2.6 复合索引
create index idx_t1_5 on t1(id,name);
5.2.7 附加字段索引
create unique index idx_t1_6 on t1(id) include (name);
5.2.8 局部索引(满足条件的行才记录)
create index idx_t1_7 on t1(name,id) where name<>'BBBB' and id>10;
5.2.9 表达式索引
create index idx_t1_8 on t1(substr(id,10,2));
5.2.10 重建索引
reindex index idx_t1_7;--不推荐,会堵住dml
create index concurrently + drop + rename--(推荐)

6.分区表
range/list/hash 推荐使用pg_pathman插件加速
1.range
create table t1_part(id bigint,name varchar(16),gmt_time timestamp) partition by range(gmt_time);
create table t1_part_p2017 partition of t1_part for values from (minvalue) to ('2018-01-01 00:00:00');
create table t1_part_p201801 partition of t1_part for values from ('2018-01-01 00:00:00') to ('2018-02-01 00:00:00');
create table t1_part_p20180201 partition of t1_part for values from ('2018-02-01 00:00:00') to ('2018-02-02 00:00:00');
2.list
create table t2_part(id bigint,name varchar(16),gmt_time timestamp) partition by list(name);
create table t2_part_a partition of t2_part for values in ('AAAAA');
create table t2_part_bc partition of t2_part for values in ('BBBBB','CCCCC');
create table t2_part_d partition of t2_part for values in ('DDDDD');
3.hash
create table t3_part(id bigint,name varchar(16),gmt_time timestamp) partition by hash(id);
create table t3_part_p0 partition of t3_part for values with (modulus 4,remainder 0);
create table t3_part_p1 partition of t3_part for values with (modulus 4,remainder 1);
create table t3_part_p2 partition of t3_part for values with (modulus 4,remainder 2);
create table t3_part_p3 partition of t3_part for values with (modulus 4,remainder 3);
4.composite
create table t1_part_p201803 partition of t1_part for values from ('2018-02-02 00:00:00') to ('2018-04-01 00:00:00') partition by list(name);
create table t1_part_p201803_a partition of t1_part_p201803 for values in ('AAAAA');

7.临时表
临时表定义无法永久保留在数据中,会话结束,临时表自动被删
三种级别
ON COMMIT PRESERVE ROWS:会话级别临时表(缺省)
ON COMMIT DELETE ROWS:事务级别,事务结束删除数据保留表定义
ON COMMIT DROP:事务结束,删除表数据及定义
create temp table temp_t1(id int,name varchar(16)) on commit preserve rows;
create temp table temp_t2(id int,name varchar(16)) on commit delete rows;
create temp table temp_t3(id int,name varchar(16)) on commit drop;

8.view
view就是查询,只有简单视图才能dml
create or replace view v_tl as select t1.id id1,t1.name name1,t2.id id2,t2.name name2 from t1,t2 where t1.id=t2.id;

9.sequence
9.1 create
create sequence seq_1 increment by 1 minvalue 1 no maxvalue start with 1 cache 100 no cycle;
9.2 调用
select nextval('seq_1');
9.3 查看当前值
select currval('seq_1');

你可能感兴趣的:(7.基本ddl)