发布于 2020

  • 在线修改PG字段类型

    2020-01-30 @ 管理

    场景 在数据库的生命周期中,有一类需求是很常见的,修改字段类型。例如: 使用INT作为主键,结果发现业务红红火火,INT32的21亿序号不够用了,想要升级为BIGINT 使用BIGINT存身份证号,结果发现里面有个X需要改为TEXT类型。 使用FLOAT存放货币,发现精度丢失,想要修改为Decimal 使用TEXT存储JSON字段,想用到PostgreSQL的JSON特性,修改为JSONB类型。 那么,如何应对这种需求呢? 常规操作 通常来说,ALTER TABLE可以用来修改字段类型。 …

    更多

发布于 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 …

    更多

  • PG Conf China 2019

    2019-11-05 @ 新闻

    在2019 PostgreSQL中国技术大会(2019/11/16 北京) 进行了关于题为《FDW原理与应用》的分享 分享内容 PDF下载:《FDW原理与应用》

    更多

  • 故障:扩展导致拒绝连接

    2019-06-13 @ 故障

    今天遇到一个比较有趣的Case,客户报告说数据库连不上了。报这个错: psql: FATAL: could not load library "/export/servers/pgsql/lib/pg_hint_plan.so": /export/servers/pgsql/lib/pg_hint_plan.so: undefined symbol: RINFO_IS_PUSHED_DOWN 当然,这种错误一眼就知道是插件没编译好,报符号找不到。因此数据库后端进程在启动时尝试加 …

    更多

  • 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 | …

    更多

  • PgSQL复制方案

    2019-03-29 @ 管理

    复制是系统架构中的核心问题之一。 集群拓扑 假设我们使用4单元的标准配置:主库,同步从库,延迟备库,远程备库,分别用字母M,S,O,R标识。 M:Master, Main, Primary, Leader, 主库,权威数据源。 S: Slave, Secondary, Standby, Sync Replica,同步副本,需要直接挂载至主库 R: Remote Replica, Report instance,远程副本,可以挂载到主库或同步从库上 O: Offline,离线延迟备库,可以挂载到 …

    更多