暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

postgresql高级特性

在路上 2025-01-07
90

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; 超级用户角色属性


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论