PostgreSQL基础整理

一、PostgreSQL简介

(1)什么是PostgreSQL

​ PostgreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS)。 用于安全地存储数据; 支持最佳做法,并允许在处理请求时检索它们.postgresql工具

​ 命令行工具:psql

​ Web管理工具:phpPgAdmin

​ 日志分析器:pgFouine

(2)、特点

  • PostgreSQL可在所有主要操作系统

  • PostgreSQL支持文本,图像,声音和视频,并包括用于C/C++,Java,Perl,Python,Ruby,Tcl和开放数据库连接(ODBC)的编程接口

  • PostgreSQL支持SQL的许多功能,例如复杂SQL查询,SQL子选择,外键,触发器,视图,事务,多进程并发控制(MVCC),流式复制(9.0),热备(9.0))

  • 在PostgreSQL中,表可以设置为从“父”表继承其特征

  • 可以安装多个扩展以向PostgreSQL添加附加功能

(3)、应用场景

(4)、理解postgresql 库,模式,表空间

  • schema:为数据库对象的集合,shcema里包含了各种对象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。一个用户一般对应一个schema,该用户的schema名等于用户名,并作为该用户缺省schema。这也就是我们在企业管理器的方案下看到schema名都为数据库用户名的原因--ORACLE。可以简单理解为一个数据库就是一个schema,包含了这个数据库的所有对象(表,视图,索引等等)
  • 模式:模式就是schema
  • 表空间:表空间是实际的数据存储的地方。

postgresql 角色与用户的关系:在postgresql中这是2个不同的对象。创建完一个角色(create role)后是没有登录权限的,创建完一个用户(create user)后是有

postgresql数据库与模式的关系:模式(schema)是对数据库(database)逻辑分割,在数据库创建的同时,就已经默认为数据库创建了一个模式--public,这也是该数据库的默认模式。所有为此数据库创建的对象(表、函数、试图、索引、序列等)都是常见在这个模式中的。postgresql创建数据库后默认创建了public模式,也默认属于该模式。可以在同一个库下面创建多个模式,当有多个模式时,进行操作是要带模式名称。如 create table shcema_name.test(id int not null );

表空间与数据库的关系:数据库创建语句CREATE DATABASE dbname 默认的数据库所有者是当前创建数据库的角色,默认的表空间是系统的默认表空间--pg_default。由于CREATE DATABASE dbname并没有指明数据库模板,所以系统将默认克隆template1数据库,得到新的数据库dbname。相对完整的语法应该是这样的:CREATE DATABASE dbname OWNER freeoa TEMPLATE template1 TABLESPACE tablespacename;在PostgreSQL中,表空间是一个目录,里面存储的是它所包含的数据库的各种物理文件。

表空间用于定义数据库对象在物理存储设备上的位置,不特定于某个单独的数据库。数据库是数据库对象的物理集合,而schema则是数据库内部用于组织管理数据库对象的逻辑集合,schema名字空间之下则是各种应用程序会接触到的对象,比如表、索引、数据类型、函数、操作符等

二、PostgreoSQL应用

1、语法

待整理https://www.yiibai.com/postgresql/postgresql-syntax.html#article-start

【abort语句】

ABORT [ WORK | TRANSACTION ]

【alter aggregate】

# 说明

# 语法
ALTER AGGREGATE name ( type ) RENAME TO new_name  
ALTER AGGREGATE name ( type ) OWNER TO new_owners

# 示例

【alter conversion】

# 说明

# 语法
ALTER CONVERSION name RENAME TO new_name  
ALTER CONVERSION name OWNER TO new_owner

【alter database】

# 说明

# 语法
ALTER DATABASE name SET parameter { TO | = } { value | DEFAULT }  
ALTER DATABASE name RESET parameter  
ALTER DATABASE name RENAME TO new_name  
ALTER DATABASE name OWNER TO new_owner

ALTER DOMAIN语句:

# 说明

# 语法
ALTER DOMAIN name { SET DEFAULT expression | DROP DEFAULT }  
ALTER DOMAIN name { SET | DROP } NOT NULL  
ALTER DOMAIN name ADD domain_constraint  
ALTER DOMAIN name DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ]  
ALTER DOMAIN name OWNER TO new_owner

2、数据类型

数值,字符串,日期/时间,布尔类型,货币类型,几何类型

  • 数值
名称 描述 存储大小 范围
smallint 存储整数,小范围 2字节 -32768 至 +32767
integer 存储整数。使用这个类型可存储典型的整数 4字节 -2147483648 至 +2147483647
bigint 存储整数,大范围。 8字节 -9223372036854775808 至 9223372036854775807
decimal 用户指定的精度,精确 变量 小数点前最多为131072个数字; 小数点后最多为16383个数字。
numeric 用户指定的精度,精确 变量 小数点前最多为131072个数字; 小数点后最多为16383个数字。
real 可变精度,不精确 4字节 6位数字精度
double 可变精度,不精确 8字节 15位数字精度
serial 自动递增整数 4字节 1 至 2147483647
bigserial 大的自动递增整数 8字节 1 至 9223372036854775807
  • 字符串
数据类型 描述
char(size) 这里size是要存储的字符数。固定长度字符串,右边的空格填充到相等大小的字符。
character(size) 这里size是要存储的字符数。 固定长度字符串。 右边的空格填充到相等大小的字符。
varchar(size) 这里size是要存储的字符数。 可变长度字符串。
character varying(size) 这里size是要存储的字符数。 可变长度字符串。
text 可变长度字符串。
  • 日期/时间

日期/时间数据类型用于表示使用日期和时间值的列。

名称 描述 存储大小 最小值 最大值 解析度
timestamp [ (p) ] [不带时区 ] 日期和时间(无时区) 8字节 4713 bc 294276 ad 1微秒/14位数
timestamp [ (p) ]带时区 包括日期和时间,带时区 8字节 4713 bc 294276 ad
date 日期(没有时间) 4字节 4713 bc 5874897 ad 1微秒/14位数
time [ (p) ] [ 不带时区 ] 时间(无日期) 8字节 00:00:00 24:00:00 1微秒/14位数
time [ (p) ] 带时区 仅限时间,带时区 12字节 00:00:00+1459 24:00:00-1459 1微秒/14位数
interval [ fields ] [ (p) ] 时间间隔 12字节 -178000000年 178000000年 1微秒/14位数
  • 货币类型
名称 描述 存储大小 范围
money 货币金额 8字节 -92233720368547758.08 至 +92233720368547758.07
  • 几何类型

几何数据类型表示二维空间对象。最根本的类型: - 形成所有其他类型的基础。

名称 存储大小 表示 描述
point 16字节 在一个平面上的点 (x,y)
line 32字节 无限线(未完全实现) ((x1,y1),(x2,y2))
lseg 32字节 有限线段 ((x1,y1),(x2,y2))
box 32字节 矩形框 ((x1,y1),(x2,y2))
path 16+16n字节 封闭路径(类似于多边形) ((x1,y1),…)
polygon 40+16n字节 多边形(类似于封闭路径) ((x1,y1),…)
circle 24字节 <(x,y),r>(中心点和半径)

3、数据库操作

1、库操作

  • 创建数据库:create database db_name
  • 删除数据库:drop database db_name
  • 创建模式(在制定库下操作):create schema shcema_name

2、表操作

  • 创建表: create table tb_name(..)
  • 删除表: drop table tb_name

3、增,删,改,查数据

  • 插入:insert into tb_name() value()
  • 查询:select column from tb_name
    • where : select col1,... from table_name where 行的限定条件
    • group by: select col1,... from table_name group by col 1,col2...
    • having: select col1,...,列的运算 as new_col_name from table_name having new_col_name的限定条件 ;
    • order by: select select col1,... from table_name order by col1,....; asc升序,desc降序
    • limit: select select col1,... from table_name limit n,m (n为起始位置,m为截取的条数)
  • 更新:update tb_name set column1 = value1, ... where
  • 删除: delete from tb_name where ..; truncate -清空表
  • 条件判断
    • and: select col from tb_name where 条件and 条件
    • or:SELECT column1, column2, ..... columnN FROM table_name WHERE [search_condition] OR [search_condition];
    • and or:SELECT column1, column2, ..... columnN FROM table_name WHERE [search_condition] AND [search_condition] OR [search_condition];
    • not:SELECT column1, column2, ..... columnN FROM table_name WHERE [search_condition] NOT [condition];
    • like:SELECT column1, column2, ..... columnN FROM table_name WHERE [search_condition] LIKE [condition];
    • in:SELECT column1, column2, ..... columnN FROM table_name WHERE [search_condition] IN [condition];
    • not in:SELECT column1, column2, ..... columnN FROM table_name WHERE [search_condition] NOT IN [condition];
    • between:SELECT column1, column2, ..... columnN FROM table_name WHERE [search_condition] BETWEEN [condition];

4、PostgreSQL 连接查询

  • 内连接(inner join on)
    SELECT table1.columns, table2.columns FROM table1 INNER JOIN table2 ON table1.common_filed = table2.common_field;


    内连接
  • 左外连接(LEFT OUTER JOIN on)
    SELECT table1.columns, table2.columns FROM table1 LEFT OUTER JOIN table2 ON table1.common_filed = table2.common_field;
    :mysql sql语句左连接与右连接没有 outer

    左连接

  • 右外连接(RIGHT OUTER JOIN)
    SELECT table1.columns, table2.columns FROM table1 RIGHT OUTER JOIN table2 ON table1.common_filed = table2.common_field;


    右连接
  • 全连接(FULL OUTER JOIN on)
    SELECT table1.columns, table2.columns FROM table1 FULL OUTER JOIN table2 ON table1.common_filed = table2.common_field;


    image.png
  • 跨连接(CROSS JOIN ):将第一个表中的每一行与第二个表的每一行相匹配,它也被称为笛卡尔积。 如果table1具有“x”行,而table2具有“y”行,则所得到的表将具有(x * y)行。
    SELECT coloums FROM table1 CROSS JOIN table2;

4、

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容