读书笔记-PostgreSQL实战

文章目录

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

sql 复制代码
1::int4
3/2::numeric

第4章 SQL高级特性

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

4.1.1 复杂查询使用CTE

sql 复制代码
WITH t  AS (
SELECT generate_series(1, 3)
)
SELECT * FROM t;

4.1.2 递归查询使用CTE

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

sql 复制代码
WITH recursive t (x)  as (
SELECT 1
UNION
SELECT x + 1
FROM t
WHERE x <  5
)

结果:15
解释:x从1开始,union加1后的值,循环知道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 返回插入的数据

sql 复制代码
INSERT INTO ... RETURNING id;
INSERT INTO ... RETURNING *;

4.3.2 RETURNING 返回更新后数据

sql 复制代码
UPDATE tablea SET flag = 'p' WHERE id = 1 RETURNING *;

4.3.3 RETURNING 返回删除的数据

sql 复制代码
DELETE FROM tablea WHERE id = 1 RETURNING *;

4.4 UPSERT

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

4.5 数据抽样

4.6 聚合函数

4.6.1 string_agg函数

4.6.2 array_agg函数

4.7 窗口函数

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

相关推荐
X56611 小时前
golang如何实现表单验证_golang表单验证实现方法
jvm·数据库·python
dfdfadffa1 小时前
如何在新电脑上正确运行已部署的 Django 项目
jvm·数据库·python
m0_748554811 小时前
Golang怎么设置响应状态码_Golang如何用WriteHeader返回404或500状态【基础】
jvm·数据库·python
a7963lin1 小时前
如何处理Data Guard环境的口令更换_SYS密码修改后的主备库密码文件分发机制
jvm·数据库·python
ooseabiscuit1 小时前
Laravel3.x核心特性全解析
java·数据库·spring
xcLeigh1 小时前
KES数据库自动创建表空间目录,不用再提前建文件夹了
数据库·oracle·自动化·表空间·文件夹
2401_846339561 小时前
mysql如何查询所有列_mysql select星号性能分析
jvm·数据库·python
雨浓YN1 小时前
GKTGD 工业监控系统-04MySQL 与 SQLite 数据库对比(类库:NET8_SQLData)
数据库·sqlite·wpf
小许同学记录成长1 小时前
基于 QxOrm 的 Qt 持久化层技术指南
开发语言·数据库·qt