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赋能服装零售:商品计划智能化,化危机为转机
在服装零售这片竞争激烈的战场上,每一个细微的决策都可能成为品牌兴衰的关键。当市场波动、消费者口味变化、供应链挑战接踵而至时,许多品牌往往将危机归咎于外部环境。然而,真相往往更为深刻——“危机不是外部的,而是你的商品计…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
