PostgreSQL
文章平均质量分 69
PostgreSQL学习分享
梦想画家
开源软件爱好者,乐于博客分享,业余时间喜欢跑步和科幻,希望与意趣相投朋友一起学习交流。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
PostgreSQL WAL归档与时间点恢复(PITR):完整技术指南
PostgreSQL的WAL(预写式日志)归档是实现时间点恢复(Point-In-Time Recovery, PITR)的核心机制。本文深入解析WAL归档的工作原理,详细说明配置步骤,并提供完整的PITR操作流程。通过实际案例演示如何从备份恢复到指定时间点,帮助数据库管理员掌握这一关键技能,确保企业数据安全。原创 2025-07-09 07:22:44 · 1242 阅读 · 0 评论 -
PostgreSQL复制技术全解析:从物理复制到逻辑复制的实践指南
PostgreSQL作为企业级数据库的核心组件,其复制技术是构建高可用架构和数据同步解决方案的基础。本文深入剖析PostgreSQL两大复制技术——物理复制与逻辑复制的实现原理、配置方法和应用场景。通过对比分析两者的技术特点,帮助读者根据业务需求选择合适的复制方案。文章包含详细的配置示例、性能优化建议和实际应用案例,为数据库管理员和架构师提供全面的实践指导。原创 2025-07-09 00:00:00 · 1217 阅读 · 0 评论 -
PostgreSQL分区裁剪:原理、实践与性能优化指南
本文深入探讨PostgreSQL中Partition Pruning(分区裁剪)技术的实现原理、应用场景和优化方法。通过详细解析分区裁剪的工作机制,结合范围分区、列表分区和哈希分区的实际案例,展示如何有效利用这一优化技术提升查询性能。文章还提供了监控分区裁剪效果的方法和常见问题的解决方案,帮助读者在实际工作中充分发挥PostgreSQL分区表的性能优势。原创 2025-07-08 01:30:00 · 747 阅读 · 0 评论 -
PostgreSQL中的HASH分区:原理、实现与最佳实践
PostgreSQL的HASH分区一种数据分布技术,它通过哈希函数将表数据均匀分散到多个分区中。这种分区方式特别适合需要将数据均匀分布且没有明显自然分区键的场景。本文将深入介绍HASH分区的原理、实现方法、性能特点以及实际应用案例,帮助您在合适的场景中有效利用这一功能。原创 2025-07-07 20:33:34 · 1306 阅读 · 0 评论 -
PostgreSQL中的BRIN索引:大数据量场景下的高效索引方案
在PostgreSQL数据库中,当面对海量数据表的查询优化时,传统B-tree索引可能面临存储空间大、维护成本高的问题。**BRIN索引(Block Range INdex)**作为一种特殊的索引类型,专门为大数据量场景设计,能够在极小的存储开销下提供高效的查询性能。本文将深入介绍BRIN索引的工作原理、适用场景、创建方法、性能优化技巧,并通过实际案例展示其应用效果。原创 2025-07-07 14:37:46 · 906 阅读 · 0 评论 -
PostgreSQL中的行级安全(Row-Level Security, RLS):精细化数据访问控制
在数据库安全领域,**行级安全(Row-Level Security, RLS)** 是一种强大的机制,允许数据库管理员(DBA)或开发者定义细粒度的访问控制策略,确保用户只能访问或修改符合特定条件的数据行。通过本文,您将掌握如何在 PostgreSQL 中高效应用 RLS,提升数据安全性。原创 2025-07-07 13:49:48 · 1285 阅读 · 0 评论 -
PostgreSQL中的rank()窗口函数:实用指南与示例
在数据分析和数据库管理中,经常需要对数据进行排名操作。PostgreSQL提供了强大的窗口函数`rank()`,可以方便地对结果集中的行进行排名。本文将详细介绍`rank()`函数的使用方法,并通过多个实用示例展示其在不同场景下的应用。原创 2025-07-03 17:19:45 · 937 阅读 · 0 评论 -
PostgreSQL TRANSLATE() 函数详解:定义、应用与对比
在数据库操作中,字符串处理是一项常见且重要的任务。PostgreSQL 提供了丰富的字符串函数来满足各种文本处理需求。其中,`TRANSLATE()` 函数是一个简单但功能强大的工具,用于字符级别的替换操作。本文将详细介绍 PostgreSQL 中的 `TRANSLATE()` 函数,包括其定义、实际应用场景、具体示例,并与其他相关函数进行对比分析。原创 2025-06-24 02:00:00 · 1321 阅读 · 0 评论 -
PostgreSQL对称between比较运算
本文介绍PostgreSQL对称between比较功能:between symmetric,在动态拼接SQL时利用它可以简化判断。PostgreSQL 9.4 及以上版本支持操作符,MySQL、Oracle、MsSQL没有对应功能。原创 2025-01-03 15:49:41 · 775 阅读 · 0 评论 -
介绍PostgreSQL CTE(common table expressions)
介绍PostgreSQL CTE(common table expressions)本文我们学习如何使用PostgreSQL CTE(common table expressions)简化复杂查询。介绍 common table expressionsPostgreSQL CTE(common table expressions) 是临时结果,可以在其他SQL中引用,如SELECT, INS...原创 2019-04-27 22:19:08 · 6614 阅读 · 1 评论 -
PostgreSQL ROLLUP教程
PostgreSQL ROLLUP教程本文介绍如何使用PostgreSQL ROLLUP生成多组集合。概述PostgreSQL ROLLUP 是group by 的子句,是生成多个分组集合的快捷功能。与Cube子句的差异是,rollup 不生成基于特定列所有可能的分组集合,生成分组集合为其子集。ROLLUP假设输入列之间存在层次结构,从而生成有意义的所有分组集合。这就是为什么ROLLUP经...原创 2019-07-21 22:10:01 · 6359 阅读 · 0 评论 -
SQL分析函数教程 - rollup - cube
SQL 分析函数教程 - rollup - cubeoracle 有一些令人兴奋的ANSI SQL扩展功能,可以快速实现计算聚合和上卷功能,主要语句包括:rollup、cube、group。这些简单SQL可以很容易实现聚合功能,无需我们通过存储过程实现。下面先从rollup语法开始。使用Rollup实现分组聚合ROLLUP语句在跨指定的维度组上计算多个级别的小计。它还计算了一个总数。ROLL...原创 2019-07-23 08:41:41 · 1607 阅读 · 0 评论 -
PostgreSQL 窗口函数教程
PostgreSQL 窗口函数教程本文我们学习如何使用PostgreSQL 窗口函数跨与当前行相关的一组行执行计算。准备示例表首先我们创建两个实例表用于演示:products 和 product_groups创建表语句:CREATE TABLE product_groups ( group_id serial PRIMARY KEY, group_name VARCHAR ...原创 2019-07-28 18:03:55 · 1730 阅读 · 0 评论 -
PostgreSQL通过pg_trgm扩展的三元索引实现全文检索
本文介绍利用pg_trgm扩展实现全文检索。1. 概述PostgreSQL可以使用三元索引增强全文检索。三元算法对字符串进行分词,如“dog” 被分为 “d”,”do”,”dog”,”og”多个词。pg_trgm扩展支持三元匹配。也在Gist和Gin索引上使用三元匹配操作提升检索速度或性能。对于全文搜索提供了不同的同义词,同时也可以使用Trigram来实现打字更正和建议。下面通过示例说明。2. 模糊匹配这里先介绍postgresql几种模糊操作符:like都比较熟悉的大小写敏感匹配,ili原创 2021-03-05 22:23:04 · 2654 阅读 · 1 评论 -
Golang PostgreSql数据库事务处理
Golang PostgreSql数据库事务处理对于数据库执行多个更新操作时,事务会将多个操作当成单个单元处理,要成功都成功,否则都失败。本文通过实例说明Go Sql事务处理。1. 环境准备 搭建PostgreSql数据库环境,我们打算在postgre数据库中新建表meta_data(id, source),然后插入记录测试事务。 go操作数据库的包为"database/sql",这里数据库使用postgreSql,需要导入github.com/lib/pq;下面是准备数据库连接代码。impo原创 2020-08-05 15:52:36 · 1582 阅读 · 0 评论 -
PostgreSQL CAST 转换数据类型
本文介绍PostgreSQL CAST操作转换数据类型。1. PostgreSQL CAST介绍很多时候需要转换数据类型。PostgreSQL 提供了CAST操作实现类型转换。语法如下:CAST ( expression AS target_type );表达式可以是常量、列、表达式目标数据类型即想转换的数据类型*cast :: operator除了上面的语法,还有另外的语法实现同样功能;expression::type,举例:SELECT '100'::INTEGER, '0原创 2020-12-20 10:47:11 · 42332 阅读 · 6 评论 -
通过例子看懂MVCC(Multi Version Concurrency Control)
本文简要介绍MVCC并解释其工作原理。也许你已看到很多相关的理论知识,这里希望使用最容易理解的示例进行说明。1. 什么是MVCC(Multi Version Concurrency Control)简言之,一条记录有多个版本。举例:用户A插入一条ID为1的记录(存储该记录在数据页上)。用户B更新ID为1的记录。一条插入记录并被另一个用户更新。首先插入记录,旧版本记录被新的更新语句改变,变成了新版本记录。但新版本记录在数据页上是独立新增,不是更新原来记录。MVCC对每个变化存储不同的版本,而不原创 2020-12-31 17:31:23 · 870 阅读 · 0 评论 -
介绍 PostgreSql 两个有用的比较操作
介绍 PostgreSql 两个有用的比较操作本文介绍PostgreSql中两个非常方便、有用的比较操作,OVERLAPS 和 BETWEEN SYMMETRIC。1. OVERLAPS(重叠)OVERLAPS操作,用于检测两个日期范围是否重叠。举例:SELECT (DATE '2016-01-10', DATE '2016-02-01') OVERLAPS (DATE '2016-01-20', DATE '2016-02-10');结果返回true。时间范围边界有两种方式:日期(tim原创 2020-11-15 17:04:32 · 1660 阅读 · 0 评论 -
介绍 PostgreSQL STRING_AGG() 和 ARRAY_AGG()函数
本文学习如何使用介绍 PostgreSQL STRING_AGG 函数,使用分割连接多个字符串。1. 介绍PostgreSQL STRING_AGG()PostgreSQL STRING_AGG() 函数是聚集函数,使用分隔符连接一组字符串,但结尾不会多余分隔符。语法如下:STRING_AGG ( expression, separator [order_by_clause] )expression 可以解析成字符串的任何有效表达式。如果是其他数据类型,需要显示转换为字符串。separa原创 2020-12-20 17:21:47 · 8330 阅读 · 0 评论 -
PostgreSQL 分区表教程
由于数据库中存储了大量数据,性能和可伸缩性是受到影响的两个主要因素。随着加载表数据的增加,需要更多的数据扫描、页交换到内存,以及其他表操作成本也会增加。分区可能是一个很好的解决方案,因为它可以将一个大表划分为更小的表,从而减少表扫描和内存交换问题,从而提高数据库性能。分区有助于扩展PostgreSQL,它将大型逻辑表拆分为较小的物理表,这些物理表可以根据使用情况存储在不同的存储介质上。通过使用显示分区及利用postgres_fdw实现的外部表,用户可以更好地利用伸缩性。自从 PostgreSQL10 支原创 2021-01-10 21:26:28 · 2576 阅读 · 1 评论 -
PostgreSQL Update join 和 Delete join 教程
本文学习如何使用 Update join 和 Delete join 语法,实现基于另一张表更新和删除表数据。Update join语法介绍Update join用于基于另一张表更新表数据,语法如下:UPDATE t1SET t1.c1 = new_valueFROM t2WHERE t1.c2 = t2.c2;from 关键字后面指定另一张表,where指定关联条件。对于t1表中每一行,update语句检查表t2,如果t1.c2 与 t2.c2 相等,则更新t1.c1为新的值。示例.原创 2021-09-02 20:11:35 · 12786 阅读 · 1 评论 -
PostgreSQL Substring教程
本文介绍PostgreSQL Substring函数,用于从字符串中抽取字串。1. Substring函数语法该函数返回字符串,语法有多种形式。1.1 三个参数SUBSTRING ( string ,start_position , length )参数解释:string 可以是 char, varchar, text等数据类型。start_position 是integer类型,指定从哪开始抽取. 如果等于零,则从第一个字符开始。虽然其他数据库可以为负数,但这里只能是正数。length原创 2021-01-12 20:34:23 · 27660 阅读 · 1 评论 -
PostgreSQL 从 csv 文件导入数据
本文我们学习如何把csv数据文件导入至PostgreSQL中。创建实例表和数据首先创建persons表,包括五个字段:idfirst_namelast_namedob : 出生日期emailCREATE TABLE persons ( id SERIAL, first_name VARCHAR(50), last_name VARCHAR(50), dob DATE, email VARCHAR(255), PRIMARY KEY (id))准备csv数.原创 2021-07-27 13:08:38 · 12315 阅读 · 0 评论 -
PostgreSQL 完全外连接(FULL OUTER JOIN) 教程
本文学习如何使用PostgreSQL 完全外连接,从两个或多个表中查询数据。完全外连接介绍完全外连接合并左连接和右连接的结果。对于连接表不匹配的行,完全连接设置每一列的值为null 。如果一个表的行与另一个表匹配,那么结果将包含来自两个的相应列。假设需要从A,B两个完全连接查询结果,语法如下:SELECT * FROM AFULL [OUTER] JOIN B on A.id = B.id;其中 [OUTER] 关键字为可选的。下图使用韦恩图表示完全连接:图1其结果包括两个表匹配的.原创 2021-09-13 17:15:21 · 7362 阅读 · 0 评论 -
PostgreSQL SERIAL创建自增列
PostgreSQL SERIAL创建自增列本文我们介绍PostgreSQL SERIAL,并展示如何使用serial类型创建表自增列。PostgreSQL SERIAL伪类型PostgreSQL序列是一种特殊的用于生产整数序列数据库对象。序列通常用于主键列,与mysql的AUTO_INCREMENT 概念类似。创建表时使用serial伪类型定义序列:CREATE TABLE table_...原创 2019-06-22 21:44:08 · 32263 阅读 · 9 评论 -
PostgreSQL Array 教程
本文带你学习PostgreSQL Array 类型,包括如何操作数组类型以及一些常用函数。Array类型数组类型是 Postgresql 的重要角色之一。每种数据都有其伴随的数组类型,如integer 对应 integer[] ,character 对应 character[] 。针对自定义数据类型,PostgreSQL在后台也创建了对应的伴随数组类型。PostgreSQL 支持任何有效的数据类型列为数组类型,包括内置类型、用户定义类型、枚举类型。下面示例,定义contacts 表,phone .原创 2021-07-04 12:00:03 · 7424 阅读 · 1 评论 -
PostgreSql psql 中必须掌握的一组常用命令
PostgreSql psql 中必须掌握的一组常用命令本文带你学习PostgreSql中一组常用命令,帮助你更快、更有效从PostgreSql中查询数据。连接PostgreSQL 数据库下面命令指定用户连接至数据库,回车后输入对应密码。psql -d database -U user -W举例postgres用户连接postgres数据库:psql -d postgres -U postgres -W用户 postgres 的口令:psql (10.15)postgres=#原创 2020-11-15 21:11:25 · 2379 阅读 · 1 评论 -
PostgreSQL 常用字符串分割函数
1. SPLIT_PARTSPLIT_PART() 函数通过指定分隔符分割字符串,并返回第N个子串。语法:SPLIT_PART(string, delimiter, position)string : 待分割的字符串delimiter:指定分割字符串position:返回第几个字串,从1开始,该参数必须是正数。如果参数值大于分割后字符串的数量,函数返回空串。示例:SELECT SPLIT_PART('A,B,C', ',', 2); -- 返回B下面我们利用该函数分割日期,获取年月原创 2021-09-11 21:25:51 · 30690 阅读 · 1 评论 -
Prometheus自定义PostgreSQL监控指标
提供默认指标,它们非常有用。但也支持灵活地使用yaml文件添加自定义指标。metrics:它的结构非常简单,每个部分都需要了解一些注意事项:metric_name:与你想要的度量名称一样简单。master:在复制环境中,这个值经常与Leader主机混淆。但它真正的意思是查询将只在DATA_SOURCE_NAME参数中配置的数据库中执行。cache_seconds:再次运行查询之前保留最后值的时间。如果度量数据不经常更改,请考虑添加此参数。原创 2024-10-26 10:52:31 · 2059 阅读 · 0 评论 -
介绍自定义PostgreSQL 聚集函数
对于借贷事务的银行账户,如何获取过去时间最大余额值?对于入住、离店的宾馆,如果获取过去时间最大客人数量?这两个场景都是求最大活动总量。通过求最大活动总量是学习PostgreSQL聚集函数最佳练习,本文带你学习窗口函数、自定义聚集函数。1. 场景数据为了简化,我们使用简单表结构仅包括amount和id两个列,id为自增列。create table entries( id serial primary key, amount double precision not null);我们使用ra原创 2020-12-20 20:17:29 · 1525 阅读 · 0 评论 -
PostgreSQL时间序列分析示例——模式匹配
本文通过实例讲解简单时间序列模式分析,如查找连续三个月增长的记录。示例数据为了演示,创建简单示例表,包括少部分示例数据:CREATE TABLE t_timeseries( id serial, data numeric);COPY t_timeseries FROM stdin DELIMITER ',';1,112,143,164,95,126,137,148,99,1510,9\.现原创 2021-04-27 21:51:21 · 814 阅读 · 0 评论 -
备份 PostgreSQL特定schema或table数据
除了创建独立数据库,PostgreSQL DBA 通常建议创建schema,因为PostgreSQL不支持跨库进行查询。在当前数据库中,你不能选择当前数据库服务器上的任何其他数据库的数据,如果要实现需要配置DB link。因此大多数数据库用户会为不同应用场景创建不同的schema,本文针对这种应用场景介绍如何备份特定schema及表。备份特定范围数据备份schemapg_dump -U postgres -d postgres --schema=public > back1.sql备份指定原创 2021-08-24 12:23:39 · 6041 阅读 · 0 评论 -
PostgreSQL 利用 array_agg 生成交叉表记录
前文我们通过多种方法创建交叉表,但有时前端语言需要容易处理 json 形式记录,然后通过适当控件渲染交叉表或图表。本文还是通过前文的数据进行讲解,示例数据可以通过前文获取,这里就直接开始了。查看每个学生每月的各科测评情况 select stu_name, extract (month from eval_day) eval_month, subject, max(eval_result) eval_result from evaluations group by 1, 2, 3返回结果:.原创 2021-07-22 21:45:47 · 802 阅读 · 0 评论 -
PostgreSQL JSONB类型及其操作
PostgreSQL 9.2 版本引入Json作为基本类型,它可以存储json对象,使得PostgreSQL 支持无Schema的NoSQL特性。PostgreSQL 9.4 有加入了jsonb 类型,本文带你了解jsonb类型,并通过示例学习相关操作。JSONB类型json类型以文本方式存储json对象,所以每次处理时需要解析和分析文本格式的json。另外还存储了不必要的空白字符和重复键。jsonb类型转换文本格式json对象未二进制格式,并删除了不需要的白色空格及重复键。因为有了预处理,jso.原创 2021-07-13 21:38:57 · 10766 阅读 · 1 评论 -
PostgreSQL定义返回表函数
PostgreSQL定义返回表函数本文我们学习如何在PostgreSQL 开发返回表函数。示例数据表我们使用的示例数据库表为film,如下图所示:示例1第一个函数发挥所有满足条件film表记录,这里使用ilike操作,和like类似,但不区分大小写:CREATE OR REPLACE FUNCTION get_film (p_pattern VARCHAR) RETURNS TA...原创 2019-05-18 16:03:37 · 10306 阅读 · 1 评论 -
速学PostgreSQL Array类型
本文介绍学习PostgreSQL Array类型及操作数组函数。1. Array类型Array在PostgreSql中扮演着重要角色。每个数据类型都有其伴随数组类型,如integer 有 integer[] 数组类型, character 对应 character[] 等。对于自定义数据类型,Postgresql同样会在自动创建对于数组类型。PostgreSQL 可以定义列未数组类型,支持任何有效的内置数据类型、用户自定义类型或枚举类型数组。举例,下面创建contacts表,phones是数组类型:原创 2021-01-02 16:56:32 · 1746 阅读 · 0 评论 -
PostgreSql 的PL/pgSQL 块结构
PostgreSql 的PL/pgSQL 块结构本文我们学习PL/pgSQL结构块,包括如何写结构块和执行结构块。什么是结构块PL/pgSQL是结构块语言,因此,PL/pgSQL函数或过程是通过结构块进行组织。完整结构块的语法如下:[ <<label>> ][ DECLARE declarations ]BEGIN statements; .....原创 2019-05-18 09:08:46 · 5149 阅读 · 0 评论 -
如何创建PostgreSQL 生成列
PostgreSQL中生成列是从其他列计算而来的特殊列。生成列与普通列不同,不是固定的值,而是又引用表中其他列的表达式决定的。生成列在SQL标准(ISO/IEC 9075)中引入,被主流RDBMS支持,PostgreSQL12开始支持生成列。原创 2023-01-11 09:43:38 · 1284 阅读 · 0 评论 -
PostgreSQL时间序列分析入门
本文通过简单示例介绍时间序列分析,如求增量与相关性。示例数据为了演示,创建简单表,加载一些示例数据。可参考上文内容。test=# CREATE TABLE t_oil ( region text, country text, year int, production int, consumption int);加载数据命令:COPY t_oil FROM PROGRAM 'curl https:原创 2021-04-25 22:03:12 · 932 阅读 · 0 评论 -
PostgreSQL Copy Table 教程
PostgreSQL Copy Table 教程本文带你一步一步学习如何拷贝已存在的表,包括表结构和数据。主要使用PostgreSql的copy表语句。1. 介绍PostgreSQL copy表语句为了完整拷贝表,包括表结构和数据,需要使用下面语句:CREATE TABLE new_table AS TABLE existing_table;只拷贝结构,创建表时需增加With no data子句:CREATE TABLE new_table AS TABLE existing_table WI原创 2020-10-21 21:33:03 · 3669 阅读 · 0 评论
分享