文档章节

PostgreSQL主从序列的last_value不一致

kenyon_君羊
 kenyon_君羊
发布于 2014/11/05 00:45
字数 488
阅读 340
收藏 1
 
一直以为PostgreSQL的主从所有数据都是一致的,但直到最近测试过程中发现的一个奇怪的序列问题让我有所改观,一开始以为是某个版本的问题,发现9.x的版本都存在这个问题,让我一度认为是postgresql的一个BUG。

我们的一个应用会定期同步PostgreSQL流复制的从机数据到一台测试机上,此时测试机上的数据和生产的现存数据是一致的,但是序列的last_value值是不一样的,导致测试机上新增数据时,最新的序列值和生产上是不一样的。

简单的测试过程如下

环境:
OS :CentOS 6.5
DB:PostgreSQL 9.4beta3
Primary:10.1.11.71
StandBy:10.1.11.72
主从环境部署略


Primary端新建一张表:
[postgres @localhost ~]$ psql
psql (9.4beta3)
Type "help" for help.
 
postgres=# create table test(id serial,remark varchar(100));
CREATE TABLE
postgres=# select sequence_name,last_value,log_cnt from test_id_seq;
sequence_name | last_value | log_cnt
---------------+------------+---------
test_id_seq   |          1 |       0
(1 row)

此时在Standby端查看
[postgres @localhost ~]$ psql
psql (9.4beta3)
Type "help" for help.

postgres=# select sequence_name,last_value,log_cnt from test_id_seq;
sequence_name | last_value | log_cnt
---------------+------------+---------
test_id_seq   |          1 |       0
(1 row)

更新Primary端的测试数据
postgres=# insert into test(remark) select generate_series(1,100)||'hello,world';
INSERT 0 100
postgres=# select sequence_name,last_value,log_cnt from test_id_seq;
sequence_name | last_value | log_cnt
---------------+------------+---------
test_id_seq   |        100 |      32
(1 row)

再次去查看standby端的序列值
postgres=# select sequence_name,last_value,log_cnt from test_id_seq;
sequence_name | last_value | log_cnt
---------------+------------+---------
test_id_seq   |        132 |       0
(1 row)

其实多更新几次,你会发现备机上的last_value比主机上的略大,而且是主机上的last_value与 log_cnt之和。log_cnt在官方文档上没有详细说明,只是标注一个内部参数,并在replication中才有用处,通常认为是备机应用其他WAL时预留的nextval值,默认是32,所以这并不是一个BUG,而是故意设置的。
如果从备机上同步数据到模测环境上需要注意这一点。

© 著作权归作者所有

共有 人打赏支持
kenyon_君羊
粉丝 499
博文 170
码字总数 121714
作品 0
杭州
其他
私信 提问
PostgreSQL备份与恢复

PostgreSQL备份与恢复 官方文档(英文):http://www.postgresql.org/docs/9.4/static/backup.html 官方文档(中文):http://58.58.27.50:8079/doc/html/9.3.1zh/backup.html 逻辑备份: 1.......

YuanyuanL
2015/08/26
0
0
postgresql通过skytools实现主从复制

系统环境:centos5.4 64bit postgresql版本:8.4 psycopg2版本:2.4.1 skytools版本:2.1.12 1.安装postgresql 安装包==>postgresql-8.4.5-1-linux-x64.bin 在主从服务器上各自安装postgresql ......

辉洒哥
2011/06/03
0
0
PostgrSQL流复制wal异常

PostgreSQL的流复制的原理是通过传递主机(master)上的wal日志信息到备机(slave)然后恢复,这中间就有一个潜在的问题,如果主机端比较忙,wal日志被覆盖了,而从机可能因为网络或者其他原因没...

kenyon_君羊
2014/01/26
0
0
生产环境postgresql主从环境配置

主从服务器IP: 192.168.11.131 postgreSQL master 192.168.11.132 postgreSQL slave 服务器系统版本: # cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.2 (Maipo) PG......

断臂人
2018/07/19
0
0
postgresql9.6主从高可用源码环境编译配置详解

系统版本:centos7 8核 32G内存 主从服务器IP: 192.168.125.33 postgreSQL master 192.168.125.34 postgreSQL slave 1、创建数据库管理账户 # groupadd pggroup # useradd -g pggroup pgus......

断臂人
01/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊flink的NetworkEnvironmentConfiguration

序 本文主要研究一下flink的NetworkEnvironmentConfiguration NetworkEnvironmentConfiguration flink-1.7.2/flink-runtime/src/main/java/org/apache/flink/runtime/taskmanager/NetworkEnv......

go4it
44分钟前
3
0
极路由4刷OpenWrt(LEDE)

申请开发者模式 登录路由器后台 进入插件中间 选中路由器信息 申请开发者权限 安装开发者插件 刷 Bootloader 下载 极路由4 的 Breed 通过SSH登录路由器 (必须安装开发者插件,端口 1022 账号...

dingdayu
53分钟前
3
0
浅淡个人学习嵌入式Linux过程

我专业是电子信息工程,在初入大学的时候,我们的班主任便要我们多多去了解一些关于电子方面的知识。后来我了解到了嵌入式,继而了解到了嵌入式Linux。其实我们学习linux差不多就学习linux内...

linux-tao
今天
7
0
SpringBoot使用GraphQL简单学习-1

官网 一、GraphQL简介 1.GraphQL是什么? GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够...

wind2012
今天
6
0
Android的WIFI局域网对讲机

https://blog.csdn.net/z979451341/article/details/79280749 (三)Android局域网内语音对讲 基于UDP语音传输 https://blog.csdn.net/stormxiaofeng/article/details/80513947 Android7.0手......

shzwork
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部