也谈如何获得PostgreSQL序列的当前值(最后值)
2014-04-23 15:07
274 查看
【原创文章,转载须注明出处】
由于前段时间一台Linux服务器(在VM笼子里),莫名其妙被一台AD撑破空间弄死了,再也救不会来(可见VM也不安全),可幸的是刚给这台Linux做了一台在线备用服务器,于是赶紧切换IP,把复制支点抹掉等等,然后用备用服务器设置Live。
本以为一切没问题,但后来用户某些系统部分功能报错,一查才发现备用服务器上PostgreSQL的序列没有被同步过来(我现在用的是slony做的同步),然后各自手动设置一番就不说了。
后来细想,有必要把这些序列的最新值也同步过来,slony没有此功能唯有自己写shellscript实现,但如何获得Live服务器上序列的最新值呢?度娘了一番,无非都是用currval('seq_name')这样的函数获得,但是,新开一个session用currval会报错的,当前大家提供的折中办法是先用nextval再用currval,不甘心,再谷歌一番也是这样的说法。
于是拿起计算机敲了一下,如果我要1分钟同步一次,一天要损失1.4K 个序列,一年要损失525K个序列,这是非常不可取的!
但通过各种尝试,居然找个一个办法轻松获得,各位看官请看:
假如我要知道seq_mail_id这个序列的最后值,那么只需要:
select * from seq_mail_id ;
结果表中last_value这个值就是你想要的,easy吧?
由于前段时间一台Linux服务器(在VM笼子里),莫名其妙被一台AD撑破空间弄死了,再也救不会来(可见VM也不安全),可幸的是刚给这台Linux做了一台在线备用服务器,于是赶紧切换IP,把复制支点抹掉等等,然后用备用服务器设置Live。
本以为一切没问题,但后来用户某些系统部分功能报错,一查才发现备用服务器上PostgreSQL的序列没有被同步过来(我现在用的是slony做的同步),然后各自手动设置一番就不说了。
后来细想,有必要把这些序列的最新值也同步过来,slony没有此功能唯有自己写shellscript实现,但如何获得Live服务器上序列的最新值呢?度娘了一番,无非都是用currval('seq_name')这样的函数获得,但是,新开一个session用currval会报错的,当前大家提供的折中办法是先用nextval再用currval,不甘心,再谷歌一番也是这样的说法。
于是拿起计算机敲了一下,如果我要1分钟同步一次,一天要损失1.4K 个序列,一年要损失525K个序列,这是非常不可取的!
但通过各种尝试,居然找个一个办法轻松获得,各位看官请看:
假如我要知道seq_mail_id这个序列的最后值,那么只需要:
select * from seq_mail_id ;
结果表中last_value这个值就是你想要的,easy吧?
相关文章推荐
- 如何用C#和SQL获得当前月的第一天和最后一天
- 如何获得Oracle当前日期的年或月的第一天和最后一天
- 如何用C#和SQL获得当前月的第一天和最后一天
- 如何用C#和SQL获得当前月的第一天和最后一天
- 如何获得Oracle当前日期的年或月的第一天和最后一天
- 点击CRichEdit ctrl 后如何获得当前点击位置
- android-如何获得当前正在运行的activity的相关信息
- VC:如何获得当前程序的视图,文档指针
- jQuery如何实现点击页面获得当前点击元素的id或其他信息
- delphi如何获得当前操作系统语言环境
- SharePoint中如何获得当前用户的loginName
- Clander的用法。如何取得当前时间一个月后/前的时间。如何取得某个月的最后一天。 如何取得今年的第一个周一。五月的第二个星期日。 如何取得今年的第一周(注意国外的日历和国内可能不一样,如何设置一周
- 1.如何获得当前文件路径
- 如何获得textBox当前光标位置
- 在C#里怎样获得当前Windows操作系统的语言种类?以及如何知道当前Windows版本?
- [VC++]VC中如何获得当前系统时间
- 如何获得Linux当前系统网络的总连接数
- Android-如何获得当前正在运行的activity和进程的相关信息
- 如何获得当前系统的local语言环境
- C/MFC如何获得应用程序当前路径(整理)