博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初探PostgreSql
阅读量:7211 次
发布时间:2019-06-29

本文共 3377 字,大约阅读时间需要 11 分钟。

  hot3.png

pg支持大部分的sql标准和现代特性:复杂查询、外键、触发器、可更新的视图、完整的事务、多版本并发控制

同时pg可以通过多种方式的用户扩展,如添加新的:数据类型、功能、操作、聚合函数、索引方法、过程语言

公约

[]:可选部分

{} and | :必须选择其中的一个

:前面元素可以重复

基本架构

pg使用cs模型(TCP/IP),一个pg session由下面程序组成:

一个服务器进程:管理数据库文件,接受来自客户端应用程序与数据库的连接,代理客户端执 行数据库操作

需要执行数据库操作的客户端应用程序,一个客户端可以是一个文本工具,图形应用,能够访 问数据库的web应用或一个专门数据维护工具。一些已经由pg提供,大部分需要用户开

pg服务能够处理客户端多个并发连接,为每一个连接fork一个新的进程,主服务总是运行,等待 客户端的连接

高级特性

视图

某些数据组合是系统特别敏感,你不想每次需要时执行查询,可以创建在查询视图,该视图的操作类似一个普通表

 CREATE VIEW myview AS      SELECT city, temp_lo, temp_hi, prcp, date, location           FROM weather, cities            WHERE city = name;  SELECT * FROM myview;

使用视图是具有良好数据设计的一个重要方面

外键

维护数据的完整性。一些简单数据库系统通过首先查询关联表检查记录是否存在,然后插入or拒绝新记录,这种方法有一些问题,很不方便。因此pg能为你做这些:

 CREATE TABLE cities (                 city     varchar(80) primary key,         location point  );  CREATE TABLE weather (                  city      varchar(80) references cities(city),                  temp_lo   int,                  temp_hi   int,                  prcp      real,                  date      date  );

此时插入cities中未存在的weather时,pg出现错误提示

事务

是所有数据库系统的一个基本概念,重要一点:将多个步聚绑定位单一,all-or-nothing操作。

步聚之间的中间状态在其他事务是不可见。如果步聚出现故障,防止事务的完成,随后的步聚将不会影响。一个事务认为是原子的。事务另一特性:原子更新是密切相关,当多个事务并发的运行,每一个事务不会看到其他事务不完整的改变。

pg中事务通过begincommit实现:

begin; UPDATE accounts SET balance = balance - 100.00     WHERE name = 'Alice';  -- etc etc  COMMIT;

如不想提交,可使用rollback代替commit,所有的更新将取消。

pg实际上将每一个sql语句块当做一个事务内执行,当你不指定begin时,每个sql都隐含包裹begin和commit块

可以通过使用savepoints更加精确的方式控制事务中的语句,savepoints容许你有选择的丢弃事务的部分,而提交剩余的。如需要回滚到savepoints使用 rollback to。释放or回滚到savepoints会自动释放该savepoints后定义的所有savepoints。这些都发生在事务内部,所以不能被其他数据库session所见。如你提交了事务,那么这个提交当做一个单位被其他session可见,而回滚则从未可见

继承

面向对象数据库的概念,打开数据库新的特性

PostgreSql基本数据类型

数值类型

Name

Storage Size

Desc

Range

smallint

2byte

Small-range integer

-32768~+32767

integer

4byte

Typical choice integer

-2147483648~+ 2147483647

bigint

8byte

Large-range integer

-9223372036854775808~+9223372036854775807

decimal

variable

User-specified precisionexact

小数点前131072位,后16383

numeric

variable

User-specified precisionexact

小数点前131072位,后16383

real

4byte

Variable precisioninexact

6位精度

double precision

8byte

Variable precisioninexact

15位精度

smallserial

2byte

Small autoincrementing integer

132767

serial

4byte

autoincrementing integer

12147483647

bigserial

8byte

Large autoincrementing integer

19223372036854775807

numeric(precision, scale) 精度位最大precision位,小数部分最大为 scale

numeric(precision) precision为正数,scale0

numeric 不使用precisionscale ,该数字将使用任意精度存储,到精度的限制

货币类型

存储一个固定小数精度的货币值,小数精度是由数据库的lc_monetary设置

Name

Storage Size

Desc

Range

money

8byte

Currency amount

-92233720368547758.08~92233720368547758.07

字符类型

Name

Desc

character varying(n), varchar(n)

限制可变长度

character(n), char(n)

固定长度,空白填充

text

可变长度不限

二进制类型

是一个八位的位组(字节)

Name

Storage Size

Desc

bytea

1or4字节加上实际二进制字符串

变长的二进制字串

日期/时间类型

Name

Stor Size

Desc

Low value

High value

Resolution

timestamp[(p)] [without time zone]

8bytes

包含日期和时间(没有时区)

4713BC

294276AD

1微秒/14

timestamp[(p)] [with  time zone]

8bytes

包含日期和时间,使用时区

4713BC

294276AD

1微秒/14

date

4bytes

日期,无时间

4713BC

5874897AD

1

time[(p)] [without time zone]

8bytes

时间,无日期

00:00:00

24:00:00

1微秒/14

time[(p)] [with  time zone]

12bytes

只有时间,使用时区

00:00:00+1459

24:00:00-1459

1微秒/14

interval[fields] [(p)]

12bytes

时间间隔

-178000000 years

178000000 years

1微秒/14

布尔类型

Name

Stor Size

Desc

boolean

1byte

true/false/unknown(NULL)

转载于:https://my.oschina.net/rksi5/blog/209747

你可能感兴趣的文章
Android基础之Java接口
查看>>
Angular开发实践(一):环境准备及框架搭建
查看>>
Vue2 源码漫游(二)
查看>>
微信浏览器下拉黑边的终极解决方案---wScroollFix
查看>>
我是如何学会爱上 Vim 的
查看>>
小tips:JS中typeof与instanceof用法
查看>>
阿里云Ecs挂载云盘
查看>>
《Kotlin项目实战开发》第1章 Kotlin是什么
查看>>
基于 react, redux 最佳实践构建的 2048
查看>>
云栖大会看技术人成长之路
查看>>
从零搭建React全家桶框架教程
查看>>
Windows command tools
查看>>
Webpack 最佳实践总结(一)
查看>>
【138天】尚学堂高淇Java300集视频精华笔记(84)
查看>>
docker与git实现push-to-deploy
查看>>
vue2.0 与 bootstrap datetimepicker的结合使用
查看>>
ant design后台模板-1.前端环境搭建
查看>>
什么是npm ?
查看>>
php 中continue break exit return 的区别
查看>>
敏捷爽畅模型及其演变——Diana Larsen专访
查看>>