跳转到主要内容

PostgreSQL 大法师

冯若航 @Vonng / Pigsty

PostgreSQL 生态进展,以及开发、使用、运维、管理、诊断、调优的经验分享。

PostgreSQL 大法师
是 Oracle 的失误让 PostgreSQL 赢了吗?PostgreSQLOracle技术评论
井喷:修了 28 个 CVE、110 个 BUG,PG 最新小版本发布PostgreSQLPG管理安全翻译
龙芯,正式进入 PostgreSQL 官方仓库PostgreSQLPG生态硬件
PostgreSQL 三十岁生日快乐PostgreSQLPG生态开源
瞬间克隆 PostgreSQL 数据库,无需黑魔法PostgreSQLPigsty工具
什么是 PostgreSQL 发行版?PostgreSQLPigsty
PostgreSQL,三十而立PostgreSQLPG生态
参加 PostgreSQL 30周年开发者大会PostgreSQLPG生态随笔
人人可用的 PG 扩展PostgreSQLPG生态扩展
PGConf.Dev 2026 今天在温哥华开幕PostgreSQLPG生态
PostgreSQL 18.4、17.10、16.14、15.18 与 14.23 发布PostgreSQLPG管理
pgBackRest 续命战与开源世界的逼定价PostgreSQLPG生态开源
顶级开源备份工具 pgBackRest 停止维护PostgreSQLPG生态开源
504 个扩展,PG 生态的天花板在哪?PostgreSQLPG生态扩展
PostgreSQL vs MySQL 2026PostgreSQLMySQLPG生态
PG 五大版本中文文档已就绪,欢迎查阅!PostgreSQL文档翻译
PostgreSQL 官网中文版:pg.centerPostgreSQL文档PG生态
PG 扩展百科全书:中英双语,开箱即用PostgreSQLPigstyPG生态扩展
464个扩展开箱即用:新版 PG 扩展目录发布PostgreSQL扩展文档
一天翻译完 PG 生态三大件文档PostgreSQL文档翻译
PostgreSQL 号外紧急补丁版本发布!PostgreSQLPG管理安全
Oracle 兼容的 PG 真的有用吗?PostgreSQLOracle国产数据库
号外:暂缓 PG 最新小版本安装与升级PostgreSQLPG管理
中国厂商首次站上 PGConf.dev 主题演讲台PostgreSQLPG生态
从AGPL到Apache:Pigsty 协议变更的思考Pigsty开源
OpenAI:一套 PG 支持8亿 ChatGPT 用户PostgreSQLCodex
PostgreSQL 高可用到底怎么做?PostgreSQLPG管理
如何快速上手学习 PostgreSQL?PostgreSQL文档
Git for Data: 瞬间克隆PG数据库PostgreSQLPG开发GIS
为什么PG将主宰AI时代的数据库PostgreSQLAI数据库
立足中国,面向全球的 PostgreSQL 发行版PostgreSQLPigsty
PostgreSQL 18 可以上生产用了吗?PostgreSQLPG管理扩展
PG扩展云:解锁 PG 生态的全部潜力PostgreSQL扩展
尝鲜须谨慎:PG新存储引擎故障案例PostgreSQL扩展故障复盘
月饼好吃:又一家PG扩展公司被Databricks收购PostgreSQL扩展商业
聚焦六大功能:PostgreSQL 18 新特性深度解析PostgreSQLPG开发性能
从PG“断供”看软件供应链中的信任问题PostgreSQLPG管理
新坑:PostgreSQL 36计PostgreSQL文档PG管理
专栏:Postgres 大法师PostgreSQL
PostgreSQL主宰数据库世界,而谁来吞噬PG?PostgreSQLPG生态
PostgreSQL 已主宰数据库世界PostgreSQLPG生态
卡脖子:PGDG切断镜像站同步通道PostgreSQLPG管理
PostgreSQL高峰论坛:参会小记PostgreSQLPG生态随笔
再见MySQL,你好PGMySQLPostgreSQL数据库
PostgreSQL + 组播,有希望成为下一个被收购的 neon 吗?PostgreSQLCodex成本
PGCon.dev闪电演讲,硬控PG大佬5分钟PostgreSQLPG生态随笔
PG生态赢得资本市场青睐:Databricks收购Neon,Supabase融资两亿美元,微软财报点名PGPostgreSQLPG生态商业
兼容Oracle的开源 PostgreSQL?PostgreSQLOracle迁移
PG被黑慢MySQL 360倍,这次我真忍不了PostgreSQLMySQL性能
Postgres Extension Day,咱们不见不散PostgreSQL扩展
OrioleDB来了!4x性能,消除顽疾,存算分离PostgreSQL
OpenHalo:MySQL线缆兼容的PostgreSQL来了!PostgreSQLMySQL
PGFS:将数据库作为文件系统PostgreSQL对象存储
PostgreSQL取得对MySQL的压倒性优势PostgreSQLMySQL技术评论
什么?PG小版本发布又翻车了?PostgreSQLPG管理安全
PostgreSQL 生态前沿进展PostgreSQLPG生态
PII数据安全合规与PG Anonymizer最佳实践PostgreSQL安全扩展
第七届PG生态大会:一些感想PostgreSQLPG生态随笔
中译版《PostgreSQL 14 Internals》上线PostgreSQLPG内核文档
小猪骑大象:PG内核与扩展包管理神器PostgreSQL工具
PostgreSQL 2024 社区现状调查报告PostgreSQLPG生态
PostgreSQL 号外小版本发布:17.2, 16.6, 15.10, 14.15, 13.18, 12.22PostgreSQLPG管理
不要更新!发布当日叫停:PG也躲不过大翻车PostgreSQL
PostgreSQL 12 过保,PG 17 上位PostgreSQL
PostgreSQL神功大成!最全扩展仓库来了!PostgreSQLPG生态扩展
PostgreSQL 规约(2024版)PostgreSQLPG开发
PG系创业公司Supabase:$80M C轮融资PostgreSQLPG生态商业
PostgreSQL 17 发布:摊牌了,我不装了!PostgreSQL
PostgreSQL可以替代微软SQL Server吗?PostgreSQLMySQLPG生态
谁整合好DuckDB,谁赢得OLAP世界PostgreSQLPG生态
PostgreSQL小版本更新,17beta3,12将EOLPostgreSQLPG管理
ClickHouse收购PeerDB:这浓眉大眼的也要来搞 PG 了?PostgreSQLOLAP商业
StackOverflow 2024调研:PostgreSQL已经杀疯了PostgreSQLPG生态
duckdb_fdw v1.0.0来了,第13届 PostgreSQL 中国技术大会见OLAPPostgreSQLPG生态
用PG的开发者,年薪比MySQL多赚四成?PostgreSQLMySQL职业
使用Pigsty自建Dify:AI工作流平台PostgreSQLPigsty容器化
让PG停摆一周的大会:PGCon.Dev 2024 参会记PostgreSQLPG生态
PostgreSQL 17 beta1 发布!PostgreSQL
为什么PostgreSQL是未来数据库的事实标准?PostgreSQLPG生态翻译
灿灿荐书:《收获,不止 SQL 优化》PostgreSQLOraclePG开发
PostgreSQL 主要贡献者 Simon Riggs 因坠机去世PostgreSQLPG生态
PostgreSQL会修改开源许可证吗?PostgreSQLPG生态开源翻译
PostgreSQL 正在吞噬数据库世界PostgreSQLPG生态扩展
技术极简主义:一切皆用PostgresPostgreSQLPG生态翻译
PG生态新玩家:ParadeDBPostgreSQLPG生态扩展
快速掌握PostgreSQL版本新特性PostgreSQL文档
令人惊叹的PostgreSQL可伸缩性PostgreSQL性能翻译
中国对PostgreSQL的贡献约等于零吗?PostgreSQLPG生态开源
展望 PostgreSQL 的2024PostgreSQLPG生态翻译
PostgreSQL荣获2024年度数据库之王!(第五次)PostgreSQLPG生态
2023年度数据库:PostgreSQL (DB-Engine)PostgreSQLPG生态
PostgreSQL 宏观查询优化之 pg_stat_statementsPostgreSQLPG管理性能
FerretDB:假扮成MongoDB的PGPostgreSQLMongoDBPG生态扩展
如何用 pg_filedump 抢救数据?PostgreSQLPG管理故障复盘
PG先写脏页还是先写WAL?PostgreSQLPG内核
如何看待 MySQL vs PGSQL 直播闹剧PostgreSQLMySQL技术评论
驳《MySQL:这个星球最成功的数据库》PostgreSQLMySQL技术评论
MySQL:这个星球最成功的数据库MySQLPostgreSQL数据库
向量是新的 JSONPostgreSQL向量扩展翻译
PostgreSQL:最成功的数据库PostgreSQLPG生态
AI大模型与向量库 PGVectorPostgreSQLPG开发扩展向量
PostgreSQL 到底有多强?PostgreSQLPG生态性能
为什么PostgreSQL是最成功的数据库?PostgreSQLPG生态
开箱即用的PG发行版:PigstyPostgreSQLPigstyRDS
开源PG全家桶上手指南PostgreSQLPG管理
为什么PostgreSQL前途无量?PostgreSQLPG生态
高可用PgSQL集群架构设计与落地PostgreSQL架构PG管理
高级模糊查询的实现PostgreSQLPG开发
PG中的本地化排序规则PostgreSQLPG管理
PostgreSQL 逻辑复制详解PostgreSQLPG管理
PG复制标识详解(Replica Identity)PostgreSQLPG管理PG开发
PG慢查询诊断方法论PostgreSQLPG管理性能
故障档案:时间回溯导致的Patroni故障PostgreSQLPG管理故障复盘
在线修改主键列类型PostgreSQLPG管理
黄金监控指标:错误延迟吞吐饱和PostgreSQLPG管理监控
数据库集群管理概念与实体命名规范PostgreSQLPG管理架构
PostgreSQL的KPIPostgreSQLPG管理监控
在线修改PG字段类型PostgreSQLPG管理迁移
事务隔离等级注意事项PostgreSQLPG开发
前后端通信线缆协议PostgreSQLPG开发PG内核
故障档案:PG安装Extension导致无法连接PostgreSQLPG管理扩展故障复盘
CDC 变更数据捕获机理PostgreSQLPG开发
PostgreSQL中的锁PostgreSQLPG开发PG管理
GIN搜索的O(n²)复杂度PostgreSQLPG开发
PostgreSQL 常见复制拓扑方案PostgreSQLPG管理架构
温备:使用pg_receivewalPostgreSQLPG管理备份
PostgreSQL监控系统概览PostgreSQL监控PG管理
故障档案:pg_dump导致的连接池污染PostgreSQLPG管理故障复盘
PostgreSQL数据页面损坏修复PostgreSQLPG管理故障复盘
关系膨胀的监控与治理PostgreSQLPG管理
TimescaleDB 快速上手PostgreSQLPG管理扩展
PipelineDB快速上手PostgreSQLPG管理扩展
故障档案:序列号消耗过快导致整型溢出PostgreSQLPG管理故障复盘
故障档案:PostgreSQL事务号回卷PostgreSQLPG管理故障复盘
PostgreSQL的触发器使用注意事项PostgreSQLPG开发
GeoIP 地理逆查询优化PostgreSQLPG开发扩展GIS
PostgreSQL开发规约(2018版)PostgreSQLPG开发软件工程
PostgreSQL好处都有啥PostgreSQLPG生态
PostGIS高效解决行政区划归属查询PostgreSQLPG开发GIS
KNN极致优化:从RDS到PostGISPostgreSQLPG开发机器学习GIS
监控PG中的表大小PostgreSQLPG管理监控
PgAdmin安装配置PostgreSQLPG管理工具
故障档案:快慢不匀雪崩PostgreSQLPG管理故障复盘
Bash与psql小技巧PostgreSQLPG管理工具
用 Exclude 实现互斥约束PostgreSQLPG开发
函数易变性等级分类PostgreSQLPG开发
Distinct On 去除重复数据PostgreSQLPG开发
PostgreSQL例行维护PostgreSQLPG管理
备份恢复手段概览PostgreSQLPG管理备份
Pgbouncer快速上手PostgreSQLPG管理
PgBackRest2中文文档PostgreSQLPG管理备份
使用sysbench测试PostgreSQL性能PostgreSQLPG管理性能
使用FIO测试磁盘性能PostgreSQLPG管理性能
空中换引擎:PostgreSQL不停机迁移数据PostgreSQLPG管理迁移
PG服务器日志常规配置PostgreSQLPG管理监控
找出没用过的索引PostgreSQLPG管理
批量配置SSH免密登录PostgreSQLPG管理
Wireshark抓包分析协议PostgreSQLPG管理工具
file_fdw妙用无穷——从数据库读取系统信息PostgreSQLPG管理扩展
源码编译安装 PostGISPostgreSQLPG管理扩展
Linux 常用统计 CLI 工具PostgreSQLPG管理工具
Go数据库教程:database/sqlPostgreSQL软件工程
GO与PG实现缓存同步PostgreSQLPG开发
用触发器审计数据变化PostgreSQLPG开发
SQL实现ItemCF推荐系统PostgreSQLPG开发机器学习
UUID性质原理与应用PostgreSQLPG开发架构
PostgreSQL MongoFDW安装部署PostgreSQLPG管理扩展
  • 用 Exclude 实现互斥约束

    冯若航 发布于 PGSQL 1600 字 4 分钟

    冯若航PostgreSQLPG开发

    Featured Image for 用 Exclude 实现互斥约束

    Exclude约束是一个PostgreSQL扩展,它可以实现一些更高级,更巧妙的的数据库约束。 前言 数据完整性是极其重要的,但由应用保证的数据完整性并不总是那么靠谱:人会犯傻,程序会出错。如果能通过数据库约束来强制数据完整性那是再好不过了:后端程序员不用再担心竞态条件导致的微妙错误,数据分析师也可以对数据质量充满信心,不需要验证与清洗。 关系型数据库通常会提供 PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK 约束,然而并不是所有的业务约束都可以用这几种约束表达。 …

    Exclude约束是一个PostgreSQL扩展,它可以实现一些更高级,更巧妙的的数据库约束。 前言 数据完整性是极其重要的,但由应用保证的数据完整性并不总是那么靠谱:人会犯傻,程序会出错。如果能通过数据库约束来强制数据完整性那是再好不过了:后端程序员不用再担心竞态条件导致的微妙错误,数据分析师也可以对数据质量充满信心,不需要验证与清洗。 关系型数据库通常会提供 PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK 约束,然而并不是所有的业务约束都可以用这几种约束表达。 …

  • 函数易变性等级分类

    冯若航 发布于 PGSQL 1080 字 3 分钟

    冯若航PostgreSQLPG开发

    Featured Image for 函数易变性等级分类

    PgSQL中的函数默认有三种易变性等级,合理使用可以显著改善性能。 核心种差 VOLATILE : 有副作用,不可被优化。 STABLE: 执行了数据库查询。 IMMUTABLE: 纯函数,执行结果可能会在规划时被预求值并缓存。 什么时候用? VOLATILE : 有任何写入,有任何副作用,需要看到外部命令所做的变更,或者调用了任何 VOLATILE 的函数 STABLE: 有数据库查询,但没有写入,或者函数的结果依赖于配置参数(例如时区) IMMUTABLE: 纯函数。 具体解释 每个函数都带 …

    PgSQL中的函数默认有三种易变性等级,合理使用可以显著改善性能。 核心种差 VOLATILE : 有副作用,不可被优化。 STABLE: 执行了数据库查询。 IMMUTABLE: 纯函数,执行结果可能会在规划时被预求值并缓存。 什么时候用? VOLATILE : 有任何写入,有任何副作用,需要看到外部命令所做的变更,或者调用了任何 VOLATILE 的函数 STABLE: 有数据库查询,但没有写入,或者函数的结果依赖于配置参数(例如时区) IMMUTABLE: 纯函数。 具体解释 每个函数都带 …

  • Distinct On 去除重复数据

    冯若航 发布于 PGSQL 832 字 2 分钟

    冯若航PostgreSQLPG开发

    Featured Image for Distinct On 去除重复数据

    Distinct On是PostgreSQL提供的特有语法,可以高效解决一些典型查询问题,例如,快速找出分组内具有最大最小值的记录。 前言 找出分组内具有最大最小值的记录,这是一个非常常见的需求。用传统SQL当然有办法解决,但是都不够优雅,PostgreSQL的SQL扩展语法Distinct ON能一步到位解决这一类问题。 DISTINCT ON 语法 SELECT DISTINCT ON (expression [, expression ...]) select_list ... Here …

    Distinct On是PostgreSQL提供的特有语法,可以高效解决一些典型查询问题,例如,快速找出分组内具有最大最小值的记录。 前言 找出分组内具有最大最小值的记录,这是一个非常常见的需求。用传统SQL当然有办法解决,但是都不够优雅,PostgreSQL的SQL扩展语法Distinct ON能一步到位解决这一类问题。 DISTINCT ON 语法 SELECT DISTINCT ON (expression [, expression ...]) select_list ... Here …

  • PostgreSQL例行维护

    冯若航 发布于 PGSQL 358 字 1 分钟

    冯若航PostgreSQLPG管理

    Featured Image for PostgreSQL例行维护

    汽车需要上油,数据库也需要维护保养。 PG中的维护工作 对Pg而言,有三项比较重要的维护工作:备份、重整、清理 备份(backup):最重要的例行工作,生命线。 制作基础备份 归档增量WAL 重整(repack) 重整表与索引能消除其中的膨胀,节约空间,确保查询性能不会劣化。 清理(vacuum) 维护表与库的年龄,避免事务ID回卷故障。 更新统计数据,生成更好的执行计划。 回收死元组。节约空间,提高性能。 备份 备份可以使用 pg_backrest 作为一条龙解决方案,但这里考虑使用脚本进行备 …

    汽车需要上油,数据库也需要维护保养。 PG中的维护工作 对Pg而言,有三项比较重要的维护工作:备份、重整、清理 备份(backup):最重要的例行工作,生命线。 制作基础备份 归档增量WAL 重整(repack) 重整表与索引能消除其中的膨胀,节约空间,确保查询性能不会劣化。 清理(vacuum) 维护表与库的年龄,避免事务ID回卷故障。 更新统计数据,生成更好的执行计划。 回收死元组。节约空间,提高性能。 备份 备份可以使用 pg_backrest 作为一条龙解决方案,但这里考虑使用脚本进行备 …

  • 备份恢复手段概览

    冯若航 发布于 PGSQL 6487 字 13 分钟

    冯若航PostgreSQLPG管理备份

    Featured Image for 备份恢复手段概览

    备份是DBA的安身立命之本,有备份,就不用慌。 备份有三种形式:SQL转储,文件系统备份,连续归档 1. SQL转储 SQL 转储方法的思想是: 创建一个由SQL命令组成的文件,服务器能利用其中的SQL命令重建与转储时状态一样的数据库。 1.1 转储 工具 pg_dump、pg_dumpall 用于进行SQL转储。结果输出到stdout。 pg_dump dbname > filename pg_dump dbname -f filename pg_dump 是一个普通的PostgreSQL客户 …

    备份是DBA的安身立命之本,有备份,就不用慌。 备份有三种形式:SQL转储,文件系统备份,连续归档 1. SQL转储 SQL 转储方法的思想是: 创建一个由SQL命令组成的文件,服务器能利用其中的SQL命令重建与转储时状态一样的数据库。 1.1 转储 工具 pg_dump、pg_dumpall 用于进行SQL转储。结果输出到stdout。 pg_dump dbname > filename pg_dump dbname -f filename pg_dump 是一个普通的PostgreSQL客户 …

  • Pgbouncer快速上手

    冯若航 发布于 PGSQL 5448 字 11 分钟

    冯若航PostgreSQLPG管理

    Featured Image for Pgbouncer快速上手

    Pgbouncer是一个轻量级的数据库连接池。 概要 pgbouncer [-d][-R][-v][-u user] <pgbouncer.ini> pgbouncer -V|-h 描述 pgbouncer 是一个PostgreSQL连接池。 任何目标应用程序都可以连接到 pgbouncer, 就像它是PostgreSQL服务器一样,pgbouncer 将创建到实际服务器的连接, 或者它将重用其中一个现有的连接。 pgbouncer 的目的是为了降低打开PostgreSQL新连接时的性能影响。 …

    Pgbouncer是一个轻量级的数据库连接池。 概要 pgbouncer [-d][-R][-v][-u user] <pgbouncer.ini> pgbouncer -V|-h 描述 pgbouncer 是一个PostgreSQL连接池。 任何目标应用程序都可以连接到 pgbouncer, 就像它是PostgreSQL服务器一样,pgbouncer 将创建到实际服务器的连接, 或者它将重用其中一个现有的连接。 pgbouncer 的目的是为了降低打开PostgreSQL新连接时的性能影响。 …

  • PgBackRest2中文文档

    冯若航 发布于 PGSQL 7659 字 16 分钟

    冯若航PostgreSQLPG管理备份

    Featured Image for PgBackRest2中文文档

    pgBackRest主页:http://pgbackrest.org pgBackRest Github主页:https://github.com/pgbackrest/pgbackrest 前言 pgBackRest旨在提供一个简单可靠,容易纵向扩展的PostgreSQL备份恢复系统。 pgBackRest并不依赖像tar和rsync这样的传统备份工具,而在内部实现所有备份功能,并使用自定义协议来与远程系统进行通信。 消除对tar和rsync的依赖可以更好地解决特定于数据库的备份问题。 自定义 …

    pgBackRest主页:http://pgbackrest.org pgBackRest Github主页:https://github.com/pgbackrest/pgbackrest 前言 pgBackRest旨在提供一个简单可靠,容易纵向扩展的PostgreSQL备份恢复系统。 pgBackRest并不依赖像tar和rsync这样的传统备份工具,而在内部实现所有备份功能,并使用自定义协议来与远程系统进行通信。 消除对tar和rsync的依赖可以更好地解决特定于数据库的备份问题。 自定义 …

  • 使用sysbench测试PostgreSQL性能

    冯若航 发布于 PGSQL 410 字 1 分钟

    冯若航PostgreSQLPG管理性能

    Featured Image for 使用sysbench测试PostgreSQL性能

    sysbench首页:https://github.com/akopytov/sysbench 安装 二进制安装,在Mac上,使用brew安装sysbench。 brew install sysbench --with-postgresql 源代码编译(CentOS): yum -y install make automake libtool pkgconfig libaio-devel # For MySQL support, replace with mysql-devel on …

    sysbench首页:https://github.com/akopytov/sysbench 安装 二进制安装,在Mac上,使用brew安装sysbench。 brew install sysbench --with-postgresql 源代码编译(CentOS): yum -y install make automake libtool pkgconfig libaio-devel # For MySQL support, replace with mysql-devel on …

  • 使用FIO测试磁盘性能

    冯若航 发布于 PGSQL 407 字 1 分钟

    冯若航PostgreSQLPG管理性能

    Featured Image for 使用FIO测试磁盘性能

    Fio是一个很好用的磁盘性能测试工具,可以通过以下命令测试磁盘的读写性能。 fio --filename=/tmp/fio.data \ -direct=1 \ -iodepth=32 \ -rw=randrw \ --rwmixread=80 \ -bs=4k \ -size=1G \ -numjobs=16 \ -runtime=60 \ -group_reporting \ -name=randrw \ --output=/tmp/fio_randomrw.txt \ && unlink …

    Fio是一个很好用的磁盘性能测试工具,可以通过以下命令测试磁盘的读写性能。 fio --filename=/tmp/fio.data \ -direct=1 \ -iodepth=32 \ -rw=randrw \ --rwmixread=80 \ -bs=4k \ -size=1G \ -numjobs=16 \ -runtime=60 \ -group_reporting \ -name=randrw \ --output=/tmp/fio_randomrw.txt \ && unlink …

  • 空中换引擎:PostgreSQL不停机迁移数据

    冯若航 发布于 PGSQL 1211 字 3 分钟

    冯若航PostgreSQLPG管理迁移

    Featured Image for 空中换引擎:PostgreSQL不停机迁移数据

    通常涉及到数据迁移,常规操作都是停服务更新。不停机迁移数据是相对比较高级的操作。 不停机数据迁移在本质上,可以视作由三个操作组成: 复制:将目标表从源库 逻辑复制 到宿库。 改读:将应用 读取路径 由源库迁移到宿库上。 改写:将应用 写入路径 由源库迁移到宿库上。 但在实际执行中,这三个步骤可能会有不一样的表现形式。 逻辑复制 使用逻辑复制是比较稳妥的做法,也有几种不同的做法:应用层逻辑复制,数据库自带的逻辑复制(PostgreSQL 10 之后的逻辑订阅),使用第三方逻辑复制插件(例如 …

    通常涉及到数据迁移,常规操作都是停服务更新。不停机迁移数据是相对比较高级的操作。 不停机数据迁移在本质上,可以视作由三个操作组成: 复制:将目标表从源库 逻辑复制 到宿库。 改读:将应用 读取路径 由源库迁移到宿库上。 改写:将应用 写入路径 由源库迁移到宿库上。 但在实际执行中,这三个步骤可能会有不一样的表现形式。 逻辑复制 使用逻辑复制是比较稳妥的做法,也有几种不同的做法:应用层逻辑复制,数据库自带的逻辑复制(PostgreSQL 10 之后的逻辑订阅),使用第三方逻辑复制插件(例如 …

  • PG服务器日志常规配置

    冯若航 发布于 PGSQL 827 字 2 分钟

    冯若航PostgreSQLPG管理监控

    Featured Image for PG服务器日志常规配置

    建议配置PostgreSQL的日志格式为CSV,方便分析,而且可以直接导入PostgreSQL数据表中。 日志相关配置项 log_destination ='csvlog' logging_collector =on log_directory ='log' log_filename ='postgresql-%a.log' log_min_duration_statement =1000 log_checkpoints =on log_lock_waits =on log_statement …

    建议配置PostgreSQL的日志格式为CSV,方便分析,而且可以直接导入PostgreSQL数据表中。 日志相关配置项 log_destination ='csvlog' logging_collector =on log_directory ='log' log_filename ='postgresql-%a.log' log_min_duration_statement =1000 log_checkpoints =on log_lock_waits =on log_statement …

  • 找出没用过的索引

    冯若航 发布于 PGSQL 543 字 2 分钟

    冯若航PostgreSQLPG管理

    Featured Image for 找出没用过的索引

    索引很有用, 但不是免费的。没用到的索引是一种浪费,使用以下SQL找出未使用的索引: 首先要排除用于实现约束的索引(删不得) 表达式索引(pg_index.indkey 中含有0号字段) 然后找出走索引扫描的次数为0的索引(也可以换个更宽松的条件,比如扫描小于1000次的) 找出没有使用的索引 视图名称:monitor.v_bloat_indexes 计算时长:1秒,适合每天检查/手工检查,不适合频繁拉取。 验证版本:9.3 ~ 10 功能:显示当前数据库索引膨胀情况。 在版本9.3与10.4上 …

    索引很有用, 但不是免费的。没用到的索引是一种浪费,使用以下SQL找出未使用的索引: 首先要排除用于实现约束的索引(删不得) 表达式索引(pg_index.indkey 中含有0号字段) 然后找出走索引扫描的次数为0的索引(也可以换个更宽松的条件,比如扫描小于1000次的) 找出没有使用的索引 视图名称:monitor.v_bloat_indexes 计算时长:1秒,适合每天检查/手工检查,不适合频繁拉取。 验证版本:9.3 ~ 10 功能:显示当前数据库索引膨胀情况。 在版本9.3与10.4上 …

  • 批量配置SSH免密登录

    冯若航 发布于 PGSQL 498 字 1 分钟

    冯若航PostgreSQLPG管理

    Featured Image for 批量配置SSH免密登录

    配置SSH是运维工作的基础,有时候还是要老生常谈一下。 生成公私钥对 理想的情况是全部通过公私钥认证,从本地免密码直接连接所有数据库机器。最好不要使用密码认证。 首先,使用 ssh-keygen 生成公私钥对 ssh-keygen -t rsa 注意权限问题,ssh内文件的权限应当设置为 0600,.ssh 目录的权限应当设置为 0700,设置失当会导致免密登录无法使用。 配置ssh config穿透跳板机 把 User 换成自己的名字。放入 .ssh/config,这里给出了有跳板机环境下配置 …

    配置SSH是运维工作的基础,有时候还是要老生常谈一下。 生成公私钥对 理想的情况是全部通过公私钥认证,从本地免密码直接连接所有数据库机器。最好不要使用密码认证。 首先,使用 ssh-keygen 生成公私钥对 ssh-keygen -t rsa 注意权限问题,ssh内文件的权限应当设置为 0600,.ssh 目录的权限应当设置为 0700,设置失当会导致免密登录无法使用。 配置ssh config穿透跳板机 把 User 换成自己的名字。放入 .ssh/config,这里给出了有跳板机环境下配置 …

  • Wireshark抓包分析协议

    冯若航 发布于 PGSQL 1889 字 4 分钟

    冯若航PostgreSQLPG管理工具

    Featured Image for Wireshark抓包分析协议

    Wireshark是一个很有用的工具,特别适合用来分析网络协议。 这里简单介绍使用Wireshark抓包分析PostgreSQL协议的方法。 假设调试本地PostgreSQL实例:127.0.0.1:5432 快速开始 下载并安装Wireshark:下载地址 选择要抓包的网卡,如果是本地测试选择 lo0 即可。 添加抓包过滤器,如果PostgreSQL使用默认设置,使用 port 5432 即可。 开始抓包 添加显示过滤器 pgsql,这样就可以滤除无关的TCP协议报文。 然后就可以执行一些操作 …

    Wireshark是一个很有用的工具,特别适合用来分析网络协议。 这里简单介绍使用Wireshark抓包分析PostgreSQL协议的方法。 假设调试本地PostgreSQL实例:127.0.0.1:5432 快速开始 下载并安装Wireshark:下载地址 选择要抓包的网卡,如果是本地测试选择 lo0 即可。 添加抓包过滤器,如果PostgreSQL使用默认设置,使用 port 5432 即可。 开始抓包 添加显示过滤器 pgsql,这样就可以滤除无关的TCP协议报文。 然后就可以执行一些操作 …

  • file_fdw妙用无穷——从数据库读取系统信息

    冯若航 发布于 PGSQL 1409 字 3 分钟

    冯若航PostgreSQLPG管理扩展

    Featured Image for file_fdw妙用无穷——从数据库读取系统信息

    PostgreSQL是最先进的开源数据库,其中一个非常给力的特性就是FDW:外部数据包装器(Foreign Data Wrapper)。通过FDW,用户可以用统一的方式从Pg中访问各类外部数据源。file_fdw 就是其中随数据库附赠的两个fdw之一。随着pg10的更新,file_fdw 也添加了一颗赛艇的功能:从程序输出读取。 小霸王妙用无穷,我们能通过 file_fdw,轻松查看操作系统信息,拉取网络数据,把各种各样的数据源轻松喂进数据库里统一查看管理。 安装与配置 file_fdw 是Pg …

    PostgreSQL是最先进的开源数据库,其中一个非常给力的特性就是FDW:外部数据包装器(Foreign Data Wrapper)。通过FDW,用户可以用统一的方式从Pg中访问各类外部数据源。file_fdw 就是其中随数据库附赠的两个fdw之一。随着pg10的更新,file_fdw 也添加了一颗赛艇的功能:从程序输出读取。 小霸王妙用无穷,我们能通过 file_fdw,轻松查看操作系统信息,拉取网络数据,把各种各样的数据源轻松喂进数据库里统一查看管理。 安装与配置 file_fdw 是Pg …

  • 源码编译安装 PostGIS

    冯若航 发布于 PGSQL 1428 字 3 分钟

    冯若航PostgreSQLPG管理扩展

    Featured Image for 源码编译安装 PostGIS

    强烈建议使用使用 yum / apt 命令从 PostgreSQL 官方二进制仓库安装 PostGIS。 参考http://www.postgresonline.com/journal/archives/362-An-almost-idiots-guide-to-install-PostgreSQL-9.5,-PostGIS-2.2-and-pgRouting-2.1.0-with-Yum.html 1. 安装环境 CentOS 7 PostgreSQL10 PostGIS2.4 …

    强烈建议使用使用 yum / apt 命令从 PostgreSQL 官方二进制仓库安装 PostGIS。 参考http://www.postgresonline.com/journal/archives/362-An-almost-idiots-guide-to-install-PostgreSQL-9.5,-PostGIS-2.2-and-pgRouting-2.1.0-with-Yum.html 1. 安装环境 CentOS 7 PostgreSQL10 PostGIS2.4 …

  • Linux 常用统计 CLI 工具

    冯若航 发布于 PGSQL 4264 字 9 分钟

    冯若航PostgreSQLPG管理工具

    Featured Image for Linux 常用统计 CLI 工具

    top free vmstat iostat top 显示Linux任务 摘要 按下空格或回车强制刷新 使用 h 打开帮助 使用 l,t,m 收起摘要部分。 使用 d 修改刷新周期 使用 z 开启颜色高亮 使用 u 列出指定用户的进程 使用 <> 来改变排序列 使用 P 按CPU使用率排序 使用 M 按驻留内存大小排序 使用 T 按累计时间排序 批处理模式 -b 参数可以用于批处理模式,配合 -n 参数指定批次数目。同时 -d 参数可以指定批次的间隔时间 例如获取机器当前的负载使用情况,以 …

    top free vmstat iostat top 显示Linux任务 摘要 按下空格或回车强制刷新 使用 h 打开帮助 使用 l,t,m 收起摘要部分。 使用 d 修改刷新周期 使用 z 开启颜色高亮 使用 u 列出指定用户的进程 使用 <> 来改变排序列 使用 P 按CPU使用率排序 使用 M 按驻留内存大小排序 使用 T 按累计时间排序 批处理模式 -b 参数可以用于批处理模式,配合 -n 参数指定批次数目。同时 -d 参数可以指定批次的间隔时间 例如获取机器当前的负载使用情况,以 …

  • Go数据库教程:database/sql

    冯若航 发布于 PGSQL 8027 字 17 分钟

    冯若航PostgreSQL软件工程

    Featured Image for Go数据库教程:database/sql

    Go使用SQL与类SQL数据库的惯例是通过标准库database/sql。这是一个对关系型数据库的通用抽象,它提供了标准的、轻量的、面向行的接口。不过 database/sql 的包文档只讲它做了什么,却对如何使用只字未提。快速指南远比堆砌事实有用,本文讲述了 database/sql 的使用方法及其注意事项。 1. 顶层抽象 在Go中访问数据库需要用到 sql.DB 接口:它可以创建语句(statement)和事务(transaction),执行查询,获取结果。 sql.DB 并不是数据库连接 …

    Go使用SQL与类SQL数据库的惯例是通过标准库database/sql。这是一个对关系型数据库的通用抽象,它提供了标准的、轻量的、面向行的接口。不过 database/sql 的包文档只讲它做了什么,却对如何使用只字未提。快速指南远比堆砌事实有用,本文讲述了 database/sql 的使用方法及其注意事项。 1. 顶层抽象 在Go中访问数据库需要用到 sql.DB 接口:它可以创建语句(statement)和事务(transaction),执行查询,获取结果。 sql.DB 并不是数据库连接 …

  • GO与PG实现缓存同步

    冯若航 发布于 PGSQL 2314 字 5 分钟

    冯若航PostgreSQLPG开发

    Featured Image for GO与PG实现缓存同步

    Parallel与Hierarchy是架构设计的两大法宝,缓存 是Hierarchy在IO领域的体现。单线程场景下缓存机制的实现可以简单到不可思议,但很难想象成熟的应用会只有一个实例。在使用缓存的同时引入并发,就不得不考虑一个问题:如何保证每个实例的缓存与底层数据副本的数据一致性(和实时性)。 PostgreSQL在版本9引入了流式复制,在版本10引入了逻辑复制,但这些都是针对PostgreSQL数据库而言的。如果希望PostgreSQL中某张表的部分数据与应用内存中的状态保持一致,我们还是需要 …

    Parallel与Hierarchy是架构设计的两大法宝,缓存 是Hierarchy在IO领域的体现。单线程场景下缓存机制的实现可以简单到不可思议,但很难想象成熟的应用会只有一个实例。在使用缓存的同时引入并发,就不得不考虑一个问题:如何保证每个实例的缓存与底层数据副本的数据一致性(和实时性)。 PostgreSQL在版本9引入了流式复制,在版本10引入了逻辑复制,但这些都是针对PostgreSQL数据库而言的。如果希望PostgreSQL中某张表的部分数据与应用内存中的状态保持一致,我们还是需要 …

  • 用触发器审计数据变化

    冯若航 发布于 PGSQL 658 字 2 分钟

    冯若航PostgreSQLPG开发

    Featured Image for 用触发器审计数据变化

    有时候,我们希望记录一些重要的元数据变更,以便事后审计之用。 PostgreSQL的触发器就可以很方便地自动解决这一需求。 -- 创建一个审计专用schema,并废除所有非superuser的权限。 DROP SCHEMA IF EXISTS audit CASCADE; CREATE SCHEMA IF NOT EXISTS audit; REVOKE CREATE ON SCHEMA audit FROM PUBLIC; -- 审计表 CREATE TABLE …

    有时候,我们希望记录一些重要的元数据变更,以便事后审计之用。 PostgreSQL的触发器就可以很方便地自动解决这一需求。 -- 创建一个审计专用schema,并废除所有非superuser的权限。 DROP SCHEMA IF EXISTS audit CASCADE; CREATE SCHEMA IF NOT EXISTS audit; REVOKE CREATE ON SCHEMA audit FROM PUBLIC; -- 审计表 CREATE TABLE …

  • SQL实现ItemCF推荐系统

    冯若航 发布于 PGSQL 3369 字 7 分钟

    冯若航PostgreSQLPG开发机器学习

    Featured Image for SQL实现ItemCF推荐系统

    推荐系统大家都熟悉,猜你喜欢,淘宝个性化什么的,前年双十一搞了个大新闻,还拿了CEO特别贡献奖。 今天就来说说怎么用PostgreSQL 5分钟实现一个最简单ItemCF推荐系统,以推荐系统最喜闻乐见的movielens数据集为例。 原理 ItemCF的原理可以看项亮的《推荐系统实战》,不过还是稍微提一下吧,了解的直接跳过就好。 Item CF,全称Item Collaboration Filter,即基于物品的协同过滤,是目前业界应用最多的推荐算法。ItemCF不需要物品与用户的标签、属性,只 …

    推荐系统大家都熟悉,猜你喜欢,淘宝个性化什么的,前年双十一搞了个大新闻,还拿了CEO特别贡献奖。 今天就来说说怎么用PostgreSQL 5分钟实现一个最简单ItemCF推荐系统,以推荐系统最喜闻乐见的movielens数据集为例。 原理 ItemCF的原理可以看项亮的《推荐系统实战》,不过还是稍微提一下吧,了解的直接跳过就好。 Item CF,全称Item Collaboration Filter,即基于物品的协同过滤,是目前业界应用最多的推荐算法。ItemCF不需要物品与用户的标签、属性,只 …

  • UUID性质原理与应用

    冯若航 发布于 PGSQL 3254 字 7 分钟

    冯若航PostgreSQLPG开发架构

    Featured Image for UUID性质原理与应用

    最近一个项目需要生成业务流水号,需求如下: ID必须是分布式生成的,不能依赖中心节点分配并保证全局唯一。 ID必须包含时间戳并尽量依时序递增。(方便阅读,提高索引效率) ID尽量散列。(分片,与HBase日志存储需要) 在造轮子之前,首先要看一下有没有现成的解决方案。 Serial 传统实践上业务流水号经常通过数据库自增序列或者发码服务来实现。 MySQL 的 Auto Increment,Postgres 的 Serial,或者 Redis+lua 写个小发码服务都是方便快捷的解决方案。这种方 …

    最近一个项目需要生成业务流水号,需求如下: ID必须是分布式生成的,不能依赖中心节点分配并保证全局唯一。 ID必须包含时间戳并尽量依时序递增。(方便阅读,提高索引效率) ID尽量散列。(分片,与HBase日志存储需要) 在造轮子之前,首先要看一下有没有现成的解决方案。 Serial 传统实践上业务流水号经常通过数据库自增序列或者发码服务来实现。 MySQL 的 Auto Increment,Postgres 的 Serial,或者 Redis+lua 写个小发码服务都是方便快捷的解决方案。这种方 …

  • PostgreSQL MongoFDW安装部署

    冯若航 发布于 PGSQL 1538 字 4 分钟

    冯若航PostgreSQLPG管理扩展

    Featured Image for PostgreSQL MongoFDW安装部署

    更新:最近MongoFDW已经由Cybertech接手维护,也许没有这么不堪了。 最近有业务要求通过PostgreSQL FDW去访问MongoDB。开始我觉得这是个很轻松的任务。但接下来的事真是让人恶心的吐了。MongoDB FDW编译起来真是要人命:混乱的依赖,临时下载和Hotpatch,错误的编译参数,以及最过分的是错误的文档。总算,我在生产环境(Linux RHEL7u2)和开发环境(Mac OS X 10.11.5)都编译成功了。赶紧记录下来,省的下次蛋疼。 环境概述 理论上编译这套 …

    更新:最近MongoFDW已经由Cybertech接手维护,也许没有这么不堪了。 最近有业务要求通过PostgreSQL FDW去访问MongoDB。开始我觉得这是个很轻松的任务。但接下来的事真是让人恶心的吐了。MongoDB FDW编译起来真是要人命:混乱的依赖,临时下载和Hotpatch,错误的编译参数,以及最过分的是错误的文档。总算,我在生产环境(Linux RHEL7u2)和开发环境(Mac OS X 10.11.5)都编译成功了。赶紧记录下来,省的下次蛋疼。 环境概述 理论上编译这套 …