PostgreSQL 如何实现upsert与新旧数据自动分离
背景 很多业务也行有这样的需求,新的数据会不断的插入,并且可能会有更新。 对于更新的数据,需要记录更新前的记录到历史表。 这个需求有点类似于审计需求,即需要对记录变更前后做审计。 我以前有写过使用hstore和触发器来满足审计需求的文档,有兴趣的同学可以参考 http://blog.163.com/d...
背景 很多业务也行有这样的需求,新的数据会不断的插入,并且可能会有更新。 对于更新的数据,需要记录更新前的记录到历史表。 这个需求有点类似于审计需求,即需要对记录变更前后做审计。 我以前有写过使用hstore和触发器来满足审计需求的文档,有兴趣的同学可以参考 http://blog.163.com/d...
背景 以Linux平台为例,如何通过ODBC连接PostgreSQL和Greenplum 正文 安装驱动 yum install -y unixODBC.x86_64 yum install -y postgresql-odbc.x86_64 查看驱动配置 cat /etc/odbcin...
背景 有一个功能,是社区官方版”永远”不考虑引入的(参见PG TODO,查找”Oracle-style”),即类似Oracle的Plan Hint。 社区开发者的理念是,引入Hint功能,会掩盖优化器本身的问题,导致缺陷不被暴露出来。 但对于我们的使用者来讲,遇到某些SQL的查询计划不好,性能出了问题,使用了...
背景 在很多前端页面中,通常会让用户勾选需要的查询条件,而用户往往会在几十个查询条件中,选择任意的组合。 那么难题来了,是不是要为每列创建索引呢,或者有什么好的方法来实现任意列的选择呢? bloom filter PostgreSQL 确实是学术界和工业界的璀璨明珠,它总是喜欢将学术界的一些玩意工业化,这...
背景 有没有被突发的IO惊到过,有没有见到过大量的autovacuum for prevent wrap。 本文依依解开这些头痛的问题。 1. PostgreSQL 的版本冻结是一个比较蛋疼的事情,为什么要做版本冻结呢? 因为PG的版本号是uint32的,是重复使用的,所以每隔大约20亿个事务后,必须要冻结...
背景 在标签系统中,通常会有多个属性,每个属性使用一个标签标示,最简单的标签是用0和1来表示,代表true和false。 我们可以把所有的标签转换成比特位,例如系统中一共有200个标签,5000万用户。 那么我们可以通过标签的位运算来圈定特定的人群。 这样就会涉及BIT位的运算。 那么我们来看看Postg...
背景 将中文转换为拼音首字母是一个比较常见的需求,比如用遥控搜索电影,对用户来说输入中文肯定很痛苦,而输入拼音首字母会方便很多。 在数据库中,我们可以在输入中文后,通过函数将其转换为拼音首字母 转换方法可以通过编码表得到,比如GBK, EUC_CN的编码是按拼音顺序来的(注意多音字),找到26个字母的边界...
背景 在一些企业里面,通常会在数据库中创建一些只读用户,这些只读用户可以查看某些用户的对象,但是不能修改或删除这些对象的数据。 这种用户通常可以给开发人员,运营人员使用,或者数据分析师 等角色的用户使用。 因为他们可能关注的是数据本身,并且为了防止他们误操作修改或删除线上的数据,所以限制他们的用户只有只读的权...
背景 云用户反映的一个问题,引发一系列安全思考。 以下是创建PostgreSQL schema的语法说明页的一个note: http://www.postgresql.org/docs/9.5/static/sql-createschema.html According to the SQL standar...
背景 阿里云的PPAS产品是一个高度兼容Oracle数据库的产品,有些用户在使用的时候,会有将数据逻辑备份到本地,然后倒入到本地库的需求。 但是PPAS既兼容PostgreSQL又兼容Oracle,用户使用PostgreSQL社区自带的pg_dump导出工具也能导出PPAS的数据。 那么问题来了,使用pg_d...