发布于 2021
-
PostgreSQL高级模糊查询
2021-03-05 @ 开发
PostgreSQL高级模糊查询 日常开发中,经常见到有模糊查询的需求。今天就简单聊一聊如何用PostgreSQL实现一些高级一点的模糊查询。 当然这里说的模糊查询,不是LIKE表达式前模糊后模糊两侧模糊,这种老掉牙的东西。让我们直接用一个具体的例子开始吧。 问题 现在,假设我们做了个应用商店,想给用户提供搜索功能。用户随便输入点什么,找出所有与输入内容匹配的应用,排个序返回给用户。 严格来说,这种需求其实是需要一个搜索引擎,最好还是用专用软件,例如ElasticSearch来搞。但实际上只要不 …
发布于 2019
-
PgSQL前后端通信协议
2019-11-12 @ 开发
了解PostgreSQL服务器与客户端通信使用的TCP协议 启动阶段 基本流程 客户端发送一条StartupMessage (F)向服务端发起连接请求 载荷包括0x30000的Int32版本号魔数,以及一系列kv结构的运行时参数(NULL0分割,必须参数为user), 客户端等待服务端响应,主要是等待服务端发送的ReadyForQuery (Z)事件,该事件代表服务端已经准备好接收请求。 上面是连接建立过程中最主要的两个事件, …
-
PgSQL事务隔离等级
2019-11-12 @ 开发
PostgreSQL 事务隔离等级 基础 SQL标准定义了四种隔离级别,但PostgreSQL实际上只有两种事务隔离等级:读已提交(Read Commited)与可序列化(Serializable) SQL标准定义了四种隔离级别,但实际上这也是很粗鄙的一种划分。详情请参考并发异常那些事。 查看/设置事务隔离等级 通过执行:SELECT current_setting('transaction_isolation'); 可以查看当前事务隔离等级。 通过在事务块顶部执行 SET …
-
PgSQL JsonPath
2019-11-12 @ 开发
PostgreSQL 12 JSON PostgreSQL 12 已经正式放出了Beta1测试版本。PostgreSQL12带来了很多给力的新功能,其中最有吸引力的特性之一莫过于新的JSONPATH支持。在以前的版本中,虽说PostgreSQL在JSON功能的支持上已经很不错了,但要实现一些特定的功能,还是需要写复杂难懂的SQL或者存储过程才能实现。 有了JSONPATH,PostgreSQL用户就能以一种简洁而高效的方式操作JSON数据。 8.14.6 jsonpath类型 该jsonpath …
-
PgSQL变更数据捕获
2019-06-12 @ 开发
在实际生产中,我们经常需要把数据库的状态同步到其他地方去,例如同步到数据仓库进行分析,同步到消息队列供下游消费,同步到缓存以加速查询。总的来说,搬运状态有两大类方法:ETL与CDC。 前驱知识 CDC与ETL 数据库在本质上是一个状态集合,任何对数据库的变更(增删改)本质上都是对状态的修改。 在实际生产中,我们经常需要把数据库的状态同步到其他地方去,例如同步到数据仓库进行分析,同步到消息队列供下游消费,同步到缓存以加速查询。总的来说,搬运状态有两大类方法:ETL与CDC。 …
-
PostgreSQL中的锁
2019-06-11 @ 开发
PostgreSQL的并发控制以 快照隔离(SI) 为主,以 两阶段锁定(2PL) 机制为辅。PostgreSQL对DML(SELECT, UPDATE, INSERT, DELETE等命令)使用SSI,对DDL(CREATE TABLE等命令)使用2PL。 PostgreSQL有好几类锁,其中最主要的是 表级锁 与 行级锁,此外还有页级锁,咨询锁等,表级锁 通常是各种命令执行时自动获取的,或者通过事务中的LOCK语句显式获取;而行级锁则是由SELECT FOR UPDATE|SHARE语句显式 …
-
GIN搜索的O(n2)负载度
2019-04-12 @ 开发
Here is the detail of why that query have O(N^2) inside GIN implementation. Details Inspect the index example_keys_idx postgres=# select oid,* from pg_class where relname = 'example_keys_idx'; -[ RECORD 1 ]-------+----------------- oid | …
发布于 2018
-
PgSQL中的触发器
2018-07-07 @ 开发
概览 触发器行为概述 触发器的分类 触发器的功能 触发器的种类 触发器的触发 触发器的创建 触发器的修改 触发器的查询 触发器的性能 触发器概述 触发器行为概述:英文,中文 触发器分类 触发时机:BEFORE, AFTER, INSTEAD 触发事件:INSERT, UPDATE, DELETE,TRUNCATE 触发范围:语句级,行级 内部创建:用于约束的触发器,用户定义的触发器 触发模式:origin|local(O), replica(R),disable(D) 触发器操作 触发器的操 …