初探PostgreSql
为什么80%的码农都做不了架构师?>>>
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中事务通过begin和commit实现:
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 precision,exact |
小数点前131072位,后16383位 |
numeric |
variable |
User-specified precision,exact |
小数点前131072位,后16383位 |
real |
4byte |
Variable precision,inexact |
6位精度 |
double precision |
8byte |
Variable precision,inexact |
15位精度 |
smallserial |
2byte |
Small autoincrementing integer |
1~32767 |
serial |
4byte |
autoincrementing integer |
1~2147483647 |
bigserial |
8byte |
Large autoincrementing integer |
1~9223372036854775807 |
numeric(precision, scale) 精度位最大precision位,小数部分最大为 scale位
numeric(precision) precision为正数,scale为0
numeric 不使用precision,scale ,该数字将使用任意精度存储,到精度的限制
货币类型
存储一个固定小数精度的货币值,小数精度是由数据库的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
初探PostgreSql相关推荐
- 基于QGIS初探PostgreSQL的PostGIS插件,包括YUM和编译安装PostGIS
写在前面:本文介绍 QGIS,只是为了展示怎么使用 PostGIS,因作者本人追求的是 PostgreSQL,所以本文的重点还是 PostGIS 这个 PostgreSQL 的插件,QGIS软件只做简 ...
- java执行查询postgresql得到中文乱码_PostgreSQL 初探
PostgreSQL 初探 PostgreSQL 是我们经常选择的数据库之一.它不仅仅是关系型数据库,同时也添加了对JSON数据的支持.全文检索功能,以及其他扩展. 2020 年 2月的总排名为第四名 ...
- postgresql 11 store procedure 初探之一
os: centos 7.4 db: postgresql 11.5 postgresql 11 之前的函数(function)和存储过程(procedure)为同义词,语法如下: CREATE [O ...
- APM - Prometheus监控系统初探
文章目录 Wiki 时序数据库 TSDB(Time Series Database) 概述 下载&安装 Prometheus server 二进制文件的方式 [ 查看版本信息 ] [运行 Pr ...
- SonarQube 初探
SonarQube 初探 文章目录 SonarQube 初探 简介 安装 修改端口号 配置数据库 PostgreSQL 启动 关闭 使用 插件安装及更新 常用插件 IDEA 支持 测试覆盖率 参考 简 ...
- 初探Meterpreter-emaste_r
[-] Meterpreter是什么 Meterpreter常用命令 Meterpreter与后渗透攻击模块 后门 1测试是不是虚拟机 2安装后门方法一 3安装后门方法二 4getgui 3389 提 ...
- 阿里云RDSDRDS初探
简介 RDS 阿里云关系型数据库(Relational Database Service,简称 RDS)是一种稳定可靠.可弹性伸缩的在线数据库服务.基于阿里云分布式文件系统和高性能存储,RDS 支持 ...
- 可以减税 PCA 什么是PostgreSQL
思维导图 PostgreSQL 思维导图 https://www.processon.com/view/link/62ce221c63768906c50d5a6d#map https://www.ph ...
- 2021年大数据Flink(九):Flink原理初探
Flink原理初探 Flink角色分工 在实际生产中,Flink 都是以集群在运行,在运行的过程中包含了两类进程. JobManager: 它扮演的是集群管理者的角色,负责调度任务.协调 checkp ...
最新文章
- 【MySQL笔记】mysql来源安装/配置步骤和支持中国gbk/gb2312编码配置
- 一个技术总监的忠告:精通那么多技术有毛用啊,你还不是不被重用?
- 列名必须是一个字符串或者数组_我爱Julia之入门-078(字符串08)
- 双目视觉焦距_双目视觉简介
- 让用户故事真的像故事那样
- python-生成器函数进阶和各种推导式day15
- ELK+Kafka 企业日志收集平台(二)这是原版
- Windows7虚拟化体验之一:Windows7部署
- 使用javasript 遍历页面CheckBox
- html5 保存 搜索历史,html5 – 如何有效处理Dart中的浏览器历史记录(即后退按钮)?...
- 【LeetCode】4月2日打卡-Day18-矩阵操作
- python 键盘输入_跟我一起学python | 探究07
- 使用spyder编译器单步调试python
- c语言中存储器的绝对地址,51单片机C语言编程中对单片机绝对地址访问的两种方法...
- 文章重复率很高,4个快速修改的小技巧,赶快用起来
- PySpark---SparkSQL中的DataFrame(一)
- jquery 入门(jquery是什么/与JavaScript的联系与区别/jquery版本/引包/入口函数)
- 一、如何下载JDK?
- 详解吉首大学第九届“新星杯”G芒砀山的神秘数字 两种dp
- PyDev for Eclipse 简介
热门文章
- shell的if-else的基本用法
- geolocation/ 百度地图api Geolocation 定位当前城市信息
- 【转】zookeeper 的监控工具
- Python中几个操作列表的内置函数filter(),map(),reduce(),lambda
- USACO / Sorting a Three-Valued Sequence (简单题,方法正确性待证)
- 转载 — 问题解决:Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) y
- Django简单打开一个文件
- idea卸载删除旧版重新安装新版后,新版本idea程序打不开闪退的解决方案
- Java关键字——final的用法
- SpringCache 集成 Redis,这才是优雅的缓存解决方案!