为什么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相关推荐

  1. 基于QGIS初探PostgreSQL的PostGIS插件,包括YUM和编译安装PostGIS

    写在前面:本文介绍 QGIS,只是为了展示怎么使用 PostGIS,因作者本人追求的是 PostgreSQL,所以本文的重点还是 PostGIS 这个 PostgreSQL 的插件,QGIS软件只做简 ...

  2. java执行查询postgresql得到中文乱码_PostgreSQL 初探

    PostgreSQL 初探 PostgreSQL 是我们经常选择的数据库之一.它不仅仅是关系型数据库,同时也添加了对JSON数据的支持.全文检索功能,以及其他扩展. 2020 年 2月的总排名为第四名 ...

  3. postgresql 11 store procedure 初探之一

    os: centos 7.4 db: postgresql 11.5 postgresql 11 之前的函数(function)和存储过程(procedure)为同义词,语法如下: CREATE [O ...

  4. APM - Prometheus监控系统初探

    文章目录 Wiki 时序数据库 TSDB(Time Series Database) 概述 下载&安装 Prometheus server 二进制文件的方式 [ 查看版本信息 ] [运行 Pr ...

  5. SonarQube 初探

    SonarQube 初探 文章目录 SonarQube 初探 简介 安装 修改端口号 配置数据库 PostgreSQL 启动 关闭 使用 插件安装及更新 常用插件 IDEA 支持 测试覆盖率 参考 简 ...

  6. 初探Meterpreter-emaste_r

    [-] Meterpreter是什么 Meterpreter常用命令 Meterpreter与后渗透攻击模块 后门 1测试是不是虚拟机 2安装后门方法一 3安装后门方法二 4getgui 3389 提 ...

  7. 阿里云RDSDRDS初探

    简介 RDS 阿里云关系型数据库(Relational Database Service,简称 RDS)是一种稳定可靠.可弹性伸缩的在线数据库服务.基于阿里云分布式文件系统和高性能存储,RDS 支持 ...

  8. 可以减税 PCA 什么是PostgreSQL

    思维导图 PostgreSQL 思维导图 https://www.processon.com/view/link/62ce221c63768906c50d5a6d#map https://www.ph ...

  9. 2021年大数据Flink(九):Flink原理初探

    Flink原理初探 Flink角色分工 在实际生产中,Flink 都是以集群在运行,在运行的过程中包含了两类进程. JobManager: 它扮演的是集群管理者的角色,负责调度任务.协调 checkp ...

最新文章

  1. 【MySQL笔记】mysql来源安装/配置步骤和支持中国gbk/gb2312编码配置
  2. 一个技术总监的忠告:精通那么多技术有毛用啊,你还不是不被重用?
  3. 列名必须是一个字符串或者数组_我爱Julia之入门-078(字符串08)
  4. 双目视觉焦距_双目视觉简介
  5. 让用户故事真的像故事那样
  6. python-生成器函数进阶和各种推导式day15
  7. ELK+Kafka 企业日志收集平台(二)这是原版
  8. Windows7虚拟化体验之一:Windows7部署
  9. 使用javasript 遍历页面CheckBox
  10. html5 保存 搜索历史,html5 – 如何有效处理Dart中的浏览器历史记录(即后退按钮)?...
  11. 【LeetCode】4月2日打卡-Day18-矩阵操作
  12. python 键盘输入_跟我一起学python | 探究07
  13. 使用spyder编译器单步调试python
  14. c语言中存储器的绝对地址,51单片机C语言编程中对单片机绝对地址访问的两种方法...
  15. 文章重复率很高,4个快速修改的小技巧,赶快用起来
  16. PySpark---SparkSQL中的DataFrame(一)
  17. jquery 入门(jquery是什么/与JavaScript的联系与区别/jquery版本/引包/入口函数)
  18. 一、如何下载JDK?
  19. 详解吉首大学第九届“新星杯”G芒砀山的神秘数字 两种dp
  20. PyDev for Eclipse 简介

热门文章

  1. shell的if-else的基本用法
  2. geolocation/ 百度地图api Geolocation 定位当前城市信息
  3. 【转】zookeeper 的监控工具
  4. Python中几个操作列表的内置函数filter(),map(),reduce(),lambda
  5. USACO / Sorting a Three-Valued Sequence (简单题,方法正确性待证)
  6. 转载 — 问题解决:Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) y
  7. Django简单打开一个文件
  8. idea卸载删除旧版重新安装新版后,新版本idea程序打不开闪退的解决方案
  9. Java关键字——final的用法
  10. SpringCache 集成 Redis,这才是优雅的缓存解决方案!