1.视图 对查询封装
create view myview as select xx from xx,xx where xx;
2.外键 维持数据的引用完整性
create table city(city varchar(80) primary key,location point); point坐标类型
create table weather(city varchar(80) reference city(city),temp_lo int,temp_hi,prcp real,date date);
3.事务 将多个步骤捆绑成一个单一的、要么全完成要么全不完成的操作。
原子性:要么整个发生要么完全不发生
一致性:事务执行前后,状态保持一致
独立性:一个事务所做的更新在它完成之前对于其他事务是不可见的。
持久性:落到磁盘
begin;开启事务
update accounts set balance=balance-100.00 where name='alice';
commit;结束事务
rollback;撤销事务
savepoint 更细粒度控制事务中的语句
4.窗口函数 在一系列与当前行有某种关联的表上执行一种计算,与聚集函数不同的是--行保留他们独立的标识
select depname,empno,salary,avg(salary) over (partition by depname) from empsalary;
第4列表示对与当前行具有相同depname的值的所有表行取得平均值,over子句定义窗口函数操作的窗口
depname | empno | salary | avg
-----------+-------+--------+-----------------------
develop | 11 | 5200 | 5020.0000000000000000
develop | 7 | 4200 | 5020.0000000000000000
develop | 9 | 4500 | 5020.0000000000000000
develop | 8 | 6000 | 5020.0000000000000000
develop | 10 | 5200 | 5020.0000000000000000
personnel | 5 | 3500 | 3700.0000000000000000
personnel | 2 | 3900 | 3700.0000000000000000
复制
5.继承,面向对象数据库中的概念, 继承父亲所有列
create table cities(name text,population real,altitude int -- (in ft));
create table capitals(state char(2)) inherits(cities);
6.权限
grant update on accounts to joe; 将accounts表更新权限分配joe角色
revoke all on accounts from public;角色public中回收关于表accounts的一切权限
7.模式schema
一个数据库是一个模式的集合,模式包含表和函数等。
完整的层次:服务器-数据库-模式-表
create schema myschema;创建模式 authorization user_name 指定给相关用户
select * from information_schema.schemata; 查询数据库中的模式
\d mychema.* 查询指定模式下的表
create table xq_schema.test(id int); 指定模式下创建表
select * from xq.xq_schema.test;访问模式下的表
drop schema myschema; 删除一个为空的模式,如果有对象需要加cascade
7.1公共模式
如果创建的表没有指定模式名称,那么会自动放入一个public的模式中。
7.2模式搜索路径
show search_path;显示当前搜索路径
set search_path to myschema,public; 设置新模式放到搜索路径
8.划分 逻辑上将一个大表分成一些小的物理上的片
1)创建主表:不包含数据,所有分区都继承它
2)创建子表:也就是分区表
3)为分区表增加约束以定义每个分区中允许的键值。check(county in ('oxfordshire','buckinghamshire'))
4)对每个分区,在关键列上创建一个索引
5)设置触发器或规则将在主表上的数据插入重定向到合适的分区上
6)确保在postgresql.conf中constraint_exclusion配置参数没有被禁用,如果禁用,查询将不会按照期望的方式优化
9.角色
概念:一个角色看做是一个数据库用户或一个数据库用户组。数据库角色在一个数据库集簇安装范围内是全局的
pg8.1之前用户和组完全不同的实体,但是现在只有角色(可以扮演用户、组)
create role name;创建一个角色
drop role name;删除一个角色
select * from pg_roles; 查询现有角色
create role name LOGIN;==create user name;相同,LOGIN是角色属性,用于登录
create role name superuser; 超级用户角色属性