PostgreSQL学习笔记(二):PostgreSQL基本操作
PostgreSQL 是一个功能强大的开源关系型数据库管理系统 (RDBMS),支持标准的 SQL 语法,并扩展了许多功能强大的操作语法.
数据类型
-
数值类型
数据类型 描述 存储大小 示例值 SMALLINT小范围整数,范围:-32,768 到 32,767 2 字节 -123INTEGER或INT中范围整数,范围:-2,147,483,648 到 2,147,483,647 4 字节 12345BIGINT大范围整数,范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 8 字节 12345678901234NUMERIC(p, s)或DECIMAL(p, s)精确的数字, p是总位数,s是小数点后位数可变长 1234.56REAL或FLOAT4单精度浮点数,范围:6 位小数精度 4 字节 1.23DOUBLE PRECISION或FLOAT8双精度浮点数,范围:15 位小数精度 8 字节 123.45678SERIAL自动递增整数,等同于 INTEGER+ 自增4 字节 1, 2, 3...BIGSERIAL自动递增整数,等同于 BIGINT+ 自增8 字节 1, 2, 3... -
字符类型
数据类型 描述 存储大小 示例值 CHAR(n)或CHARACTER(n)固定长度字符串,不足位数会用空格补齐 n 字节 'abc 'VARCHAR(n)或CHARACTER VARYING(n)可变长度字符串,最多 n个字符实际长度 + 1 字节 'abc'TEXT不限长度的字符串 可变长 'Hello, world!'说明:
<1>:CHAR(n)固定长度,适合存储固定格式的字符串。<2>:VARCHAR(n)是常用的可变长度类型。<3>:TEXT用于存储长文本。 -
布尔类型
数据类型 描述 存储大小 示例值 BOOLEAN 布尔值, TRUE、FALSE或NULL1 字节 TRUE -
日期和时间类型
数据类型 描述 存储大小 示例值 DATE日期(不包含时间) 4 字节 '2025-01-06'TIME [WITHOUT TIME ZONE]时间(不包含日期) 8 字节 '12:30:00'TIMESTAMP [WITHOUT TIME ZONE]日期和时间 8 字节 '2025-01-06 12:30:00'TIMESTAMP WITH TIME ZONE带时区的日期和时间 8 字节 '2025-01-06 12:30:00+08'INTERVAL时间间隔 16 字节 '1 year 2 months' -
几何类型
几何类型用于存储点、线、圆等几何信息数据类型 描述 示例值 POINT平面中的一个点 '(1.5, 2.5)'LINE无限长的直线 '{1, -1, 0}'LSEG有限线段 '(1.5, 2.5), (3.5, 4.5)'BOX矩形框 '((1, 2), (3, 4))'PATH路径(开或闭) '((1, 1), (2, 2), (3, 3))'POLYGON多边形 '((1, 1), (2, 2), (3, 3))'CIRCLE圆形 '<(1, 1), 5>' -
数组类型
数据类型 描述 示例值 INTEGER[]整数数组 {1, 2, 3}TEXT[]文本数组 {'hello', 'world'} -
JSON和JSONB类型
数据类型 描述 示例值 JSON原始 JSON 格式,保留格式 '{"key": "value"}'JSONB二进制存储的 JSON,查询更快 '{"key": "value"}' -
UUID类型
数据类型 描述 示例值 UUID通用唯一标识符 (128 位) 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11' -
XML类型
数据类型 描述 示例值 XMLXML 数据 '<note><to>Tove</to></note>' -
枚举类型
枚举类型允许定义一组固定值。
CREATE TYPE mood AS ENUM ('happy', 'sad', 'neutral');使用:
CREATE TABLE person (name TEXT,current_mood mood ); -
范围类型
数据类型 描述 示例值 INT4RANGE整数范围 [1,10)NUMRANGE数字范围 [1.5,2.5)TSRANGE不带时区的时间范围 ['2023-01-01', '2023-12-31')TSTZRANGE带时区的时间范围 ['2023-01-01 00:00:00+00', '2023-12-31 23:59:59+00')
数据操作
创建数据库和用户
// 创建数据库
CREATE DATABASE database_name;// 删除数据库
DROP DATABASE database_name;// 创建用户
CREATE USER user_name WITH PASSWORD 'password';// 为用户授予权限
GRANT ALL PRIVILEGES ON DATABASE database_name TO user_name;
数据定义语言 (DDL)
// 创建表
CREATE TABLE table_name (column_name1 data_type [constraints],column_name2 data_type [constraints],...
);// 添加列
ALTER TABLE table_name ADD COLUMN column_name data_type;// 修改列
ALTER TABLE table_name ALTER COLUMN column_name TYPE new_data_type;// 删除列
ALTER TABLE table_name DROP COLUMN column_name;// 删除表
DROP TABLE table_name;
数据操作语言 (DML)
基本查询:
// 插入数据
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);// 查询数据
SELECT column1, column2 FROM table_name WHERE condition;SELECT * FROM table_name;// 更新数据
UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;// 删除数据
DELETE FROM table_name WHERE condition;
扩展查询:
// 分组查询
SELECT column1, COUNT(*) FROM table_name GROUP BY column1 HAVING COUNT(*) > 1;// 连接查询(JOIN)
内连接:
SELECT a.column1, b.column2
FROM table1 a
INNER JOIN table2 b
ON a.common_column = b.common_column;左连接:
SELECT a.column1, b.column2
FROM table1 a
LEFT JOIN table2 b
ON a.common_column = b.common_column;右连接:
SELECT a.column1, b.column2
FROM table1 a
RIGHT JOIN table2 b
ON a.common_column = b.common_column;// 子查询
SELECT column1
FROM table_name
WHERE column2 IN (SELECT column2FROM another_tableWHERE condition
);
PostgreSQL特性
PostgreSQL提供了几种丰富的数据类型,有一些特定的用法。
数组
在 PostgreSQL 中,数组是一种非常强大的数据类型,它可以存储一组同类型的值(例如整数、文本等),以下是关于数组的详细用法。
创建数组字段:
CREATE TABLE users (id SERIAL PRIMARY KEY,name TEXT,favorite_numbers INTEGER[], -- 整数数组字段favorite_colors TEXT[] -- 文本数组字段
);

插入数组数据:
INSERT INTO users (name, favorite_numbers, favorite_colors)
VALUES ('Alice', '{1, 2, 3}', '{"red", "blue", "green"}');
查询数组数据:
// 查询 favorite_numbers 包含 2 的用户
SELECT name FROM users WHERE 2 = ANY (favorite_numbers);// 查询数组是否包含所有指定值
-- 查询 favorite_numbers 包含所有值 {1, 2} 的用户
SELECT name FROM users WHERE favorite_numbers @> '{1, 2, 4}';// 查询数组是否为另一个数组的子集
-- 查询 favorite_numbers 是 {1, 2, 3} 的子集的用户
SELECT name FROM users WHERE favorite_numbers <@ '{1, 2, 3}';
更新数组:
// 向 Alice 的 favorite_numbers 中追加一个新值 40
UPDATE users SET favorite_numbers = favorite_numbers || 40 WHERE name = 'Alice';// 将 Alice 的 favorite_numbers 的第 1 个元素更新为 100
UPDATE users SET favorite_numbers[1] = 100 WHERE name = 'Alice';
删除数据中元素:
UPDATE users SET favorite_numbers = array_remove(favorite_numbers, '40') WHERE name = 'Alice';
PostgreSQL 提供了许多用于数组操作的内置函数和操作符:
| 操作符/函数 | 描述 | 示例 |
|---|---|---|
ARRAY[...] | 创建数组 | SELECT ARRAY[1, 2, 3]; |
ANY (array) | 判断值是否在数组中 | SELECT 2 = ANY('{1, 2, 3}'); |
@> | 数组包含另一个数组 | SELECT '{1, 2, 3}'::int[] @> '{1, 2}'; |
<@ | 数组是另一个数组的子集 | SELECT '{1, 2}'::int[] <@ '{1, 2, 3}'; |
array_length(array, n) | 获取数组的长度 | SELECT array_length('{1, 2, 3}', 1); |
unnest(array) | 将数组展开为行 | SELECT unnest('{1, 2, 3}'::int[]); |
| array_remove | 删除数组中某个值 | UPDATE users SET favorite_numbers = array_remove(favorite_numbers, '40') |
JSON和JSONB
在 PostgreSQL 中,JSON 和 JSONB 是两种用于存储 JSON 数据的列类型。它们功能强大,广泛用于现代应用中。
JSON 与 JSONB 的主要区别
-
存储方式:
JSON:以文本格式存储数据,存储和检索时保持输入顺序。JSONB:以二进制格式存储,经过解析和去重处理(键的顺序不保存)。
-
性能:
JSON:适合读取为原始 JSON 字符串,查询效率较低。JSONB:支持索引,查询和操作效率更高。
-
使用场景:
JSON:需要保持原始 JSON 数据格式(如调试或日志记录)。JSONB:需要高效查询、过滤或处理 JSON 数据。
创建表:
CREATE TABLE example (id SERIAL PRIMARY KEY,data JSON, -- 存储为 JSON 格式data_b JSONB -- 存储为 JSONB 格式
);
插入数据:
INSERT INTO example (data, data_b) VALUES
('{"name": "Alice", "age": 25, "tags": ["developer", "gamer"]}', '{"name": "Alice", "age": 25, "tags": ["developer", "gamer"]}');

查询数据:
1. 访问 JSON 数据的字段
使用 -> 和 ->> 操作符:
->:提取字段为 JSON 类型。->>:提取字段为文本类型。
-- 提取 JSON 对象的字段
SELECT data->'name' AS name_json, data_b->'name' AS name_jsonb FROM example;-- 提取字段值为文本
SELECT data->>'name' AS name_text, data_b->>'name' AS name_text FROM example;
2、查询嵌套数据
-- 提取嵌套 JSON 对象中的字段值
SELECT data->'tags'->>0 AS first_tag, data_b->'tags'->>0 AS first_tag FROM example;
3、JSONB函数和操作符
- 检查字段是否存
-- 检查 JSONB 中是否包含某个字段 SELECT data_b ? 'name' AS has_name FROM example;-- 检查多个字段是否存在 SELECT data_b ?& array['name', 'age'] AS has_all FROM example; - 数组操作
-- 查询 JSONB 数组是否包含某个值 SELECT data_b->'tags' ? 'developer' AS contains_tag FROM example; - 删除字段
SELECT data_b - 'age' AS without_age FROM example;
数据更新:
// 更新json数据中age字段值为30
UPDATE example SET data_b = jsonb_set(data_b, '{age}', '30')
WHERE data_b->>'name' = 'Alice';相关文章:
PostgreSQL学习笔记(二):PostgreSQL基本操作
PostgreSQL 是一个功能强大的开源关系型数据库管理系统 (RDBMS),支持标准的 SQL 语法,并扩展了许多功能强大的操作语法. 数据类型 数值类型 数据类型描述存储大小示例值SMALLINT小范围整数,范围:-32,768 到 32,7672 字节-123INTE…...
关于内网外网,ABC类地址,子网掩码划分
本文的三个关键字是:内网外网,ABC类地址,子网掩码划分。围绕以下问题展开: 如何从ip区分外网、内网?win和linux系统中,如何查询自己的内网ip和外网ip。开发视角看内外网更多是处于安全考虑,接口…...
nginx 配置 本地启动
1.nginx下载地址:nginx: download nginx详解:Nginx配置终极版指南(全网最详细)_nginx_脚本之家 2.vue 项目打包生成dist文件里面的文件复制到下载好的nginx的html目录下 3.配置nginx配置文件 打包生成的dist前端包都是属于生产环…...
UE5 打包要点
------------------------- 1、需要环境 win sdk ,大约3G VS,大约10G 不安装就无法打包,就是这么简单。 ----------------------- 2、打包设置 编译类型,开发、调试、发行 项目设置-地图和模式,默认地图 项目…...
OneFlow的简单介绍
OneFlow 是北京一流科技有限公司旗下的采用全新架构设计的开源工业级通用深度学习框架。以下是关于 OneFlow 的详细介绍: 本篇文章的目录 特点 功能 应用场景 发展历程 特点 简洁易用的接口:为深度学习相关的算法工程师提供一套简洁易用的用户接口…...
聊一聊 C#异步 任务延续的三种底层玩法
一:背景 1. 讲故事 最近聊了不少和异步相关的话题,有点疲倦了,今天再写最后一篇作为近期这类话题的一个封笔吧,下篇继续写我熟悉的 生产故障 系列,突然亲切感油然而生,哈哈,免费给别人看程序故…...
(k8s)Flannel Error问题解决!
1.问题描述 书接上回,我们在解决kubectl不断重启的时候引入了Flannel 网络插件,但是一上来就报错, 2.问题解决 自己的思路:照例开始检查 1.先检查一下目前Flannel的pod kubectl get pods --all-namespaces 2.检查 Flannel的po…...
Delaunay三角刨分算法理解及c#过程实现
Delaunay三角刨分算法理解及c#过程实现 0 引言1 关于三角剖分2 Delaunay三角剖分算法实现及对比3 结语0 引言 💻💻AI一下💻💻 三角剖分是什么? 三角剖分是一种将平面或曲面划分成三角形集合的方法。在二维平面中,给定一个平面区域(可以是多边形等),通过连接区域…...
Backend - ADO.NET(C# 操作Oracle、PostgreSQL DB)
目录 一、引入参考 1. ConfigurationManager的调用前提: 2. NpgsqlConnection的调用前提: 3. OracleConnection的调用前提: 二、设置数据库链接字串 1. 在App.config中设定链接数据库详情 2. 获取数据库链接字串 三、调用 1.调用Oracle数据库…...
Idea-离线安装SonarLint插件地址
地址: SonarQube for IDE - IntelliJ IDEs Plugin | Marketplace 选择Install Plugin from Disk..,选中下载好的插件,然后重启idea...
Leetcode Hot100 第三题 234. 回文链表
用快慢指针找到链表中间节点反转后面一段链表遍历每个节点做判断为什么是while pre: 不能写while head呢 ? 答:因为slow节点在反转后,他的前序节点除了反转之后的节点,之前正序的节点仍然存在的,即slow.pre 的next依旧是slow, 我…...
Python教程丨Python环境搭建 (含IDE安装)——保姆级教程!
工欲善其事,必先利其器。 学习Python的第一步不要再加收藏夹了!提高执行力,先给自己装好Python。 1. Python 下载 1.1. 下载安装包 既然要下载Python,我们直接进入python官网下载即可 Python 官网:Welcome to Pyt…...
SpringBoot项目实战(39)--Beetl网页HTML文件中静态图片及CSS、JS文件的引用和展示
使用Beetl开发网页时,在网页中使用的CSS、JS、图片等静态资源需要进行适当的配置才可以展示。大致的过程如下: (1)首先Spring Security框架需要允许js、css、图片资源免授权访问。 (2)网站开发时࿰…...
ARIMA模型 (AutoRegressive Integrated Moving Average) 算法详解与PyTorch实现
ARIMA模型 (AutoRegressive Integrated Moving Average) 算法详解与PyTorch实现 目录 ARIMA模型 (AutoRegressive Integrated Moving Average) 算法详解与PyTorch实现1. ARIMA模型概述1.1 时间序列预测1.2 ARIMA的优势2. ARIMA的核心技术2.1 自回归 (AR)2.2 差分 (I)2.3 移动平…...
【Uniapp-Vue3】swiper滑块视图容器的用法
我们使用swiper标签就可以实现轮播图的效果。 一、swiper组件的结构 整体的轮播图使用swiper标签,轮播的每一页使用swiper-item标签。 <template><swiper class"swiper"><swiper-item><view class"swiper-item">111…...
allure报告修改默认语言为中文
1、项目根目录创建.py文件,把代码复制进去 import os from pathlib import Pathdef create_settings_js_file(directory"../pytest_mytt/reports/allures/", filenamesettings.js):# 创建或确认目录存在Path(directory).mkdir(parentsTrue, exist_okTrue…...
国产3D CAD将逐步取代国外软件
在工业软件的关键领域,计算机辅助设计(CAD)软件对于制造业的重要性不言而喻。近年来,国产 CAD 的发展态势迅猛,展现出巨大的潜力与机遇,正逐步改变着 CAD 市场长期由国外软件主导的格局。 国产CAD发展现状 …...
GolangWeb开发- net/http模块
文章目录 Golang开发-案例整理汇总一、net/http介绍二、HTTP客户端Get请求Post请求三、HTTP服务端总结Golang开发经典案例,点击下方链接 Golang开发-案例整理汇总 一、net/http介绍 Go语言内置的net/http包提供了HTTP客户端和服务端的实现。 文档链接: https://pkg.go.dev/n…...
Vue2中使用Echarts
1.安装echarts 在项目根目录下,使用npm或yarn安装ECharts: npm install echarts --save 或者 yarn add echarts 2.在相应的vue页面中引入echarts <script> import * as echarts from "echarts"; </script> 3.代码解析 <…...
AI赋能服装零售:商品计划智能化,化危机为转机
在服装零售这片竞争激烈的战场上,每一个细微的决策都可能成为品牌兴衰的关键。当市场波动、消费者口味变化、供应链挑战接踵而至时,许多品牌往往将危机归咎于外部环境。然而,真相往往更为深刻——“危机不是外部的,而是你的商品计…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
