前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >迁移Postgres的Sequence(序列)

迁移Postgres的Sequence(序列)

原创
作者头像
艾超_运成
修改2021-05-19 11:42:13
2.7K0
修改2021-05-19 11:42:13
举报
文章被收录于专栏:Postgres WorldPostgres World

序列(Sequence)的当前值(Currval)无法通过pg_dump导出,又不能对源实例做修改,得这么办才行。


在结构导出时,序列(Sequence)的当前值无法通过pg_dump导出,只能通过事后查询该序列的当前值并写入目标库。

查询序列的当前值,有两种办法:

  1. select currval('seqname') 仅获得当前会话最后一次生成的值。实际执行中,必须先执行nextval后才能执行currval,这样会修改源数据库,不可取
  2. select last_value from seqname 获得所有会话中最后一次生成的值

修改目标库序列的当前值,也有两种办法:

  1. select setval('seqname', val) 修改序列当前值(原子操作
  2. alter sequence seqname restart with val 修改序列当前值(阻塞性事务,会阻塞其他会话的nextval操作)

建议采用的方案

既可以干净地获取源值,又能低成本地设置到目标。

  1. select last_value from seqname 获得源库当前值
  2. select setval('seqname', val) 在目标库设置目标值

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档