news 2026/5/12 10:39:40

读书笔记-PostgreSQL实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
读书笔记-PostgreSQL实战

文章目录

  • 第1章 安装与配置基础
  • 第2章 客户端工具
    • 2.1. pgAdmin4简介
    • 2.2 psql功能及应用
      • 2.2.1 使用psql连接数据库
      • 2.2.2 psql元命令介绍
      • 2.2.3 psql导入、导出表数据
      • 2.2.4 psql的语法和选项介绍
      • 2.2.5 psql执行sql脚本
      • 2.2.6 psql如何传递变量到SQL
      • 2.2.7 使用psql定制日常维护脚本
      • 2.2.8 psql 亮点功能
  • 第3章 数据类型
    • 3.1 数字类型
      • 3.1.1 数字类型列表
      • 3.1.2 数字类型操作符与数学函数
    • 3.2 字符类型
      • 3.2.1 字符类型列表
      • 3.2.2 字符类型函数
    • 3.3 时间 / 日期类型
      • 3.3.1 时间 / 日期类型列表
      • 3.3.2 时间 / 日期类型操作符
      • 3.3.3 时间 / 日期常用函数
    • 3.4 布尔类型
    • 3.5 网络地址类型
    • 3.6 数组类型
    • 3.7 范围类型
    • 3.8 json/jsonb类型
    • 3.9 数据类型转换
      • 3.9.1 通过格式化函数进行转换
      • 3.9.2 通过CAST函数进行转换
      • 3.9.3 通过 :: 操作符进行转换
  • 第4章 SQL高级特性
    • 4.1 WITH查询,常成为CTE(Common Table Expressions),WITH查询在复杂查询中定义一个辅助语句,可理解为在一个查询中定义的临时表,这一特性常用于复杂查询或递归查询应用场景
      • 4.1.1 复杂查询使用CTE
      • 4.1.2 递归查询使用CTE
    • 4.2 批量插入
      • 4.2.1 方式一:INSERT INTO ... SELECT ...
      • 4.2.2 方式二:INSERT INTO VALUES(),(),...()
      • 4.2.3 方式三:COPY 或 \COPY元命令
    • 4.3 RETURNING 返回修改的数据
      • 4.3.1 RETURNING 返回插入的数据
      • 4.3.2 RETURNING 返回更新后数据
      • 4.3.3 RETURNING 返回删除的数据
    • 4.4 UPSERT
    • 4.5 数据抽样
    • 4.6 聚合函数
      • 4.6.1 string_agg函数
      • 4.6.2 array_agg函数
    • 4.7 窗口函数

第1章 安装与配置基础

N/A

第2章 客户端工具

2.1. pgAdmin4简介

pgAdmin是PostgreSQL的图形化客户端工具

2.2 psql功能及应用

psql是PostgreSQL自带的命令行客户端工具

2.2.1 使用psql连接数据库

  • 1. 连接数据库:远程: psql -h ip -p 1921 库名 用户名 本地: psql 库名 用户名
  • 2. 使用\q或Ctrl + D退出

2.2.2 psql元命令介绍

psql元命令是指以反斜线开头的命令,便捷管理数据库,比如查看数据库对象定义、查看数据库对象占用空间大小、列出数据库各种对象名称、数据导入导出等

  • 1. \l 查看数据库列表
  • 2. \db 查看表空间列表
  • 3. \d 表名 查看表定义
  • 4. \dt+ 表名/索引名 查看表、索引占用空间大小
  • 5. \sf 查看函数代码
  • 6. \x 设置查询结果输出
  • 7. \h 便捷的HELP命令

2.2.3 psql导入、导出表数据

  • COPY命令是SQL命令,\copy是元命令
  • COPY命令必须具有SUPERUSER超级权限,\copy元命令不需要SUPERUSER权限

2.2.4 psql的语法和选项介绍

  • psql [option…] [dbname [username]]

option参数选项:

  • -A 设置 非对齐输出模式
  • -t 只显示记录数据
  • -q 不显示输出数据

2.2.5 psql执行sql脚本

  • psql的-c选项支持在操作系统层面通过psql向数据库发起SQL命令,psql -c “SELECT current_user;”,也可以使用单引号
  • psql mydb pguser -f aa.sql

2.2.6 psql如何传递变量到SQL

  • \set 元命令方式传递变量 \set v_id 2
  • psql的-v参数传递变量 psql -v v_id=2 mydb pguser -f aa.sql

2.2.7 使用psql定制日常维护脚本

  1. 定制维护脚本:查询活动会话
\setactive_session'select pid,usename,datname,query,client_addr from pg_stat_activity where pid <> pg_backend_pid() and state=\'active\' order by query;'

执行::actiive_session

2.2.8 psql 亮点功能

  • \timing 显示SQL执行时间
  • \watch 反复执行当前SQL

第3章 数据类型

3.1 数字类型

3.1.1 数字类型列表

  • smallint
  • integer
  • bigint
  • decimal
  • numeric
  • real
  • double precision
  • smallserial
  • serial
  • bigserial

3.1.2 数字类型操作符与数学函数

  • mod()
  • ceil()
  • floor()

3.2 字符类型

3.2.1 字符类型列表

  • character varying(n),varchar(n)
  • character(n),char(n)
  • text 无长度限制

3.2.2 字符类型函数

  • char_length()
  • octet_length() 字符串占用的字节数
  • position() 字符在字符串中的位置
  • substring() 提取子串
  • split_part() 根据分隔符拆分字符串

3.3 时间 / 日期类型

3.3.1 时间 / 日期类型列表

  • timestamp [§] [without time zone]
  • timestamp [§] with time zone
  • date
  • time [§] [without time zone]
  • time [§] with time zone
  • interval [fields] [§] 时间间隔

3.3.2 时间 / 日期类型操作符

  • 日期相加: SELECT date ‘2017-07-29’ + interval ‘1 days’;
  • 日期相减: SELECT date ‘2017-07-29’ - interval ‘1 days’;
  • 日期相乘: SELECT 100 * interval ‘1 second’;
  • 日期相除: SELECT interval ‘1 hour’ / double precision ‘3’;

3.3.3 时间 / 日期常用函数

  • 当前时间:SELECT current_date,current_time;
  • 从日期、时间数据类型中抽取年、月、日、时、分、秒:SELECT EXTRACT(year FROM now());

3.4 布尔类型

boolean

3.5 网络地址类型

  • cidr
  • inet
  • macaddr
  • macaddr8

3.6 数组类型

类型[]

3.7 范围类型

  • int4range
  • int8range
  • numrange
  • tsrange
  • tstzrange
  • daterange

3.8 json/jsonb类型

json 文本
jsonb 二进制

3.9 数据类型转换

3.9.1 通过格式化函数进行转换

  • to_char(timestamp, text)
  • to_char(interval, text)
  • to_char(int, text)
  • to_char(numeric, text)
  • to_date(text, text)
  • to_number(text, text)
  • to_timestamp(text, text)

3.9.2 通过CAST函数进行转换

CAST(varchar’123’ as text)

3.9.3 通过 :: 操作符进行转换

1::int43/2::numeric

第4章 SQL高级特性

4.1 WITH查询,常成为CTE(Common Table Expressions),WITH查询在复杂查询中定义一个辅助语句,可理解为在一个查询中定义的临时表,这一特性常用于复杂查询或递归查询应用场景

4.1.1 复杂查询使用CTE

WITHtAS(SELECTgenerate_series(1,3))SELECT*FROMt;

4.1.2 递归查询使用CTE

WITH查询的一个重要属性是RECURSIVE,使用RECURSIVE属性可以引用自己的输出,从而实现递归,一般用于层次结构或树状结构的应用场景。

WITHrecursive t(x)as(SELECT1UNIONSELECTx+1FROMtWHEREx<5)结果:15解释:x从1开始,union1后的值,循环知道x小于5结束,之后计算x值的总和。

4.2 批量插入

4.2.1 方式一:INSERT INTO … SELECT …

4.2.2 方式二:INSERT INTO VALUES(),(),…()

4.2.3 方式三:COPY 或 \COPY元命令

4.3 RETURNING 返回修改的数据

4.3.1 RETURNING 返回插入的数据

INSERTINTO...RETURNINGid;INSERTINTO...RETURNING*;

4.3.2 RETURNING 返回更新后数据

UPDATEtableaSETflag='p'WHEREid=1RETURNING*;

4.3.3 RETURNING 返回删除的数据

DELETEFROMtableaWHEREid=1RETURNING*;

4.4 UPSERT

指INSERT … ON CONFLICT UPDATE,用来解决插入过程中数据冲突的情况

4.5 数据抽样

4.6 聚合函数

4.6.1 string_agg函数

4.6.2 array_agg函数

4.7 窗口函数

窗口函数也是基于结果集进行计算,与聚合函数不同的是窗口函数不会将结果集进行分组计算并输出一行,而是将计算出的结果合并到输出的结果集上,并返回多行。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 10:31:37

从鸡兔同笼到蒙特卡洛:用C++聊聊‘随机算法’到底能解决什么实际问题

从鸡兔同笼到蒙特卡洛&#xff1a;用C聊聊‘随机算法’到底能解决什么实际问题 在算法设计的传统教学中&#xff0c;确定性思维往往占据主导地位——我们习惯于寻找精确解、最优解&#xff0c;仿佛所有问题都有一条笔直通向答案的路径。但当你面对一个拥有35个头和94只脚的鸡兔…

作者头像 李华
网站建设 2026/5/12 10:27:24

【Matlab】MATLAB教程:Simulink掩码封装(自定义子系统界面+参数化子系统应用)

MATLAB教程:Simulink掩码封装(自定义子系统界面+参数化子系统应用) 本教程适配MATLAB R2020a及以上全系列主流版本,聚焦Simulink核心实用技能——掩码封装(Masked Subsystem),全程围绕“掩码封装基础认知、自定义子系统界面实操、参数化子系统实现、实战案例复刻、新手…

作者头像 李华
网站建设 2026/5/12 10:20:55

LLM幻觉工程级治理2026:系统化检测与消除AI捏造内容的完整方案

深度技术指南 | 从原理到工程实践的幻觉防控体系 —## 幻觉的本质&#xff1a;模型在"自信地猜测"LLM的幻觉问题在2026年依然是制约AI应用落地的核心障碍之一。理解幻觉&#xff0c;首先要理解LLM的本质&#xff1a;它是一个下一词预测机器&#xff0c;不是一个"…

作者头像 李华
网站建设 2026/5/12 10:17:32

Anaconda环境翻车实录:从‘CondaMemoryError’到完美恢复的完整指南

Anaconda环境崩溃自救手册&#xff1a;从诊断到彻底修复的实战指南 那天下午&#xff0c;当你在终端第15次尝试运行conda update --all时&#xff0c;屏幕上突然跳出鲜红的"CondaMemoryError"字样&#xff0c;整个开发环境瞬间陷入瘫痪。这不是普通的报错&#xff0c…

作者头像 李华
网站建设 2026/5/12 10:15:39

ESP32开发板Flash芯片更换实战:从4MB升级到16MB的完整操作与风险规避

ESP32开发板Flash芯片更换实战&#xff1a;从4MB升级到16MB的完整操作与风险规避 当你手头的ESP32开发板因项目需求面临存储空间不足时&#xff0c;硬件层面的Flash扩容可能是最直接的解决方案。不同于软件优化或外部存储扩展&#xff0c;直接更换更大容量的Flash芯片能从根本上…

作者头像 李华