PostgreSQL基础(一)

本文介绍了PostgreSQL数据库的基础知识,包括安装、数据类型如数值、货币、字符、日期/时间、布尔、位串、枚举、UUID、文本检索、几何、JSON和数组类型,并详细阐述了每种类型的特性和使用方法。还提到了如何创建和操作数组类型的数据。
摘要由CSDN通过智能技术生成

PostgreSQL基础(一)

PostgreSQL 是一个对象-关系数据库服务器(ORDBMS)

手册地址:https://www.runoob.com/manual/PostgreSQL/index.html

关系型数据库(RDBMS):传统的关系型数据库管理系统,是建立实体与实体之间的关系,最后将实体建立成表。

对象-关系型数据库(ORDBMS):将实体建立成对象类进行封装,也是建立实体与实体之间的关系,对象之间的通信(外键等)通过消息进行。本质上还是关系型数据库!

ORDBMS就是在RDBMS的基础上添加了一些新特性!

PostgreSQL提供了两种可选模式。一种模式保证如果操作系统或硬件崩溃,则数据将保存到磁盘中,这种模式通常比大多数商业数据库要慢,这是因为它使用了刷新(或同步)方法;另一种模式与第一种不同,它不提供数据保证,但它通常比商业数据库运行得快。 遗憾的是,还没有一种折中的模式:既提供一定程度的数据安全性,又有较快的执行速度。今后的版本将会提供这种模式。

安装

安装教程:https://www.runoob.com/postgresql/windows-install-postgresql.html

如果遇到浏览器不允许的错误,则查看该博客:https://blog.csdn.net/qq_45681057/article/details/107239331



PostgreSQL数据类型

数值类型

数据类型名字存储长度描述范围
smalint2B小范围整数-32768 到 +32767
integer4B常用的整数-2147483648 到 +2147483647
bigint8B大范围整数-9223372036854775808 到 +9223372036854775807
decimal可变长用户指定的精度,精确小数点前 131072 位;小数点后 16383 位
numeric可变长用户指定的精度,精确小数点前 131072 位;小数点后 16383 位
real4B可变精度,不精确6 位十进制数字精度
double precision8B可变精度,不精确15 位十进制数字精度
smallserial2B自增的小范围整数1 到 32767
serial4B自增整数1 到 2147483647
bigserial8B自增的大范围整数1 到 9223372036854775807

货币类型

数据类型名字存储长度描述范围
money8B货币金额-92233720368547758.08 到 +92233720368547758.07

money是具有固定小数精度的货币金额类型,小数点后两位精度。

int,biging,numeric类型的值可以转换为money,不建议使用浮点数处理货币类型,因为存在舍入错误的可能!


字符类型

数据类型名字描述
character varying(n)变长,有长度限制
varchar(n)定长,不足补空白
character(n)定长,不足补空白
char(n)定长,不足补空白
text变长,无长度限制(其实也是有的但是特别大)

日期/时间类型

名字存储空间描述最低值最高值分辨率
timestamp [ (p) ] [ without time zone ]8 字节日期和时间(无时区)4713 BC294276 AD1 毫秒 / 14 位
timestamp [ (p) ] with time zone8 字节日期和时间,有时区4713 BC294276 AD1 毫秒 / 14 位
date4 字节只用于日期4713 BC5874897 AD1 天
time [ (p) ] [ without time zone ]8 字节只用于一日内时间00:00:0024:00:001 毫秒 / 14 位
time [ (p) ] with time zone12 字节只用于一日内时间,带时区00:00:00+145924:00:00-14591 毫秒 / 14 位
interval [ fields ] [ (p) ]12 字节时间间隔-178000000 年178000000 年1 毫秒 / 14 位

布尔类型

布尔类型有三种状态,true、false、unknown。第三种类型用NULL表示。

数据类型名称存储格式描述
boolean1Btrue/false/NULL

位串类型

位串就是01字符串。有两种位类型。

数据类型名称描述
bit(n)存储长度为n的位串
bit varying(n)最大可以存储长度为n的位串

注意!bit类型的数据必须精确匹配位数(多了少了都不行)。写一个没有长度的bit等效于 bit(1)。

bit varying类型数据是最长 n 的变长类型(可以少,但不能多)。写一个没有长度的bit varying意思是没有长度限制。


枚举类型

与其他类型不同,枚举类型需要使用 CREATE TYPE 命令创建。创建后才能作为表中字段的类型!

例如:

CREATE TYPE mood AS ENUM ("SAD", "HAPPY")

CREATE TABLE person(
	name varchar(11),
    current_mood mood
);

INSERT INTO person VALUES ("Bob", "HAPPY");
SELECT * FROM person WHERE current_mood = "HAPPY";

UUID类型

UUID类型生成的数据是唯一的。UUID用于标识唯一数据。

数据类型名字描述
UUID标识的字段中的每个元素都是唯一的

UUID 被写成一个小写十六进制数字的序列,由分字符分成几组, 特别是一组8位数字+3组4位数字+一组12位数字,总共 32 个数字代表 128 位, 一个这种标准的 UUID 例子如下:

a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11

文本检索类型

全文检索即通过自然语言文档的集合来找到那些匹配一个查询的检索。

PostgreSQL 提供了两种数据类型用于支持全文检索:

数据类型名字描述
tsvectortsvector 的值是一个无重复值的 lexemes 排序列表, 即一些同一个词的不同变种的标准化。
tsquerytsquery 存储用于检索的词汇,并且使用布尔操作符 &(AND),|(OR)和!(NOT) 来组合它们,括号用来强调操作符的分组。

几何类型

数据类型名字存储空间说明表现形式
point16 字节平面中的点(x,y)
line32 字节(无穷)直线(未完全实现)((x1,y1),(x2,y2))
lseg32 字节(有限)线段((x1,y1),(x2,y2))
box32 字节矩形((x1,y1),(x2,y2))
path16+16n 字节闭合路径(与多边形类似)((x1,y1),…)
path16+16n 字节开放路径[(x1,y1),…]
polygon40+16n 字节多边形(与闭合路径相似)((x1,y1),…)
circle24 字节<(x,y),r> (圆心和半径)

JSON类型

JSON类型的数据可以转换成字符串进行存储,但是直接存储为JSON类型读取后更好检索(不用读出来再转换成JSON类型了)

数据类型名字描述
JSONJSON类型的数据

PostgreSQL提供了两个函数处理JSON:

  • array_to_json("{{1, 5}, {99, 100}}"::int[]) 结果:[[1, 5], [99, 100]]
  • row_to_json(row(1, 'foo')) 结果:{"f1":1, "f2":"foo"}

数组类型

PostgreSQL允许将字段定义为可变长的多维数组。

数组的类型可以是任何 基本类型、用户自定义类型、枚举类型、复合类型。

创建表时声明为数组类型
CREATE TABLE testtable (
	name varchar(11),
    alias varchar(11)[3],
    matrix int[][],
    years int[3]
);
向数组类型字段中插值
INSERT INTO testtable VALUES
('Bob', '{"HaPi", "HanHan"}', '{{1,2,3}, {4,5,6}, {7,8,9}}', '{1,1,1}');

向数组类型插入值的时候,使用花括号 {} 进行分隔(类似于python中的[]),元素在 {} 中使用逗号分隔。

访问数组

访问PostgreSQL中的数组类型与平常其他语言访问数组一样,例如这里的查询语句:

SELECT * FROM testtable WHERE matrix[0][0] > matrix[0][1];

查询不出来结果。

根据数组类型数据筛选元组

根据数组类型的数据查询元组,必须对数组中的每个值进行检查!

SELECT * FROM testtable WHERE alias[0] = "HaPi" AND alias[1] = "HanHan";
  1. 或使用ALL函数获取集合后筛选:

    SELECT * FROM testtable WHERE ALL(years) = 1;
    
修改数组类型

有两种方法可以修改数组类型的数据:

  1. 直接使用结构化字符串修改数据:

    UPDATE testtable SET matrix = '{{1,2}, {2,3}}'
    
  2. 使用 ARRAY 构造器修改数据:

    UPDATE testtable SET matrix = ARRAY[[1,2], [2,3]]
    

但是注意,结构需要相同(例如表中数组类型是二维数组,在插入、修改时也必须是二维数组)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值