PostgreSQL: 数据迁移之序列问题(也可以使用在所有使用序列数据库上,比如Oracle)
2012-09-28 14:16
736 查看
一、问题背景:
今天在做一个OA系统,原先的数据库是Oracle的,后来改到Postgresql数据库,一开始把数据库迁移到Postgresql上来,序列和建表都通过Oracle导出的sql语句来完成,没有考虑到序列在重新创建后,会重新重初始值开始计算,让我遇到了现在的问题,新的数据无法插入。这个让我想起了以前在华为时候,一位DBA跟我说过,数据在迁移的时候一定要先check序列的问题,现在想起来确实,呵呵。二、如何解决 数据迁移后,序列的问题
当然对于DBA来说,这个必要做的。1、创建序列
skytf=> create sequence seq_test_1 INCREMENT by 1 MINVALUE 1 NO MAXVALUE start with 1 ; CREATE SEQUENCE
2、查看序列属性
skytf=> \d seq_test_1 Sequence "skytf.seq_test_1" Column | Type | Value ---------------+---------+--------------------- sequence_name | name | seq_test_1 last_value | bigint | 1 start_value | bigint | 1 increment_by | bigint | 1 max_value | bigint | 9223372036854775807 min_value | bigint | 1 cache_value | bigint | 1 log_cnt | bigint | 0 is_cycled | boolean | f is_called | boolean | f
3、查看序列的Next值
skytf=> select nextval('seq_test_1'); nextval --------- 1 (1 row) skytf=> select nextval('seq_test_1'); nextval --------- 2 (1 row)
4、查看序列最近使用的值或说是当前值是什么
skytf=> select currval('seq_test_1'); currval --------- 2 (1 row) skytf=> select currval('seq_test_1'); currval --------- 2 (1 row)
5、那么如何解决呢?重置下序列的值
方法一:
skytf=> select setval('seq_test_1',100); setval -------- 100 (1 row) skytf=> select currval('seq_test_1'); currval --------- 100 (1 row) skytf=> select nextval('seq_test_1'); nextval --------- 101 (1 row) 说明:把序列修改为100
方法二:
skytf=> alter sequence seq_test_1 restart with 200; ALTER SEQUENCE skytf=> select nextval('seq_test_1'); nextval --------- 200 (1 row) skytf=> select nextval('seq_test_1'); nextval --------- 201 (1 row) skytf=> \d seq_test_1 Sequence "skytf.seq_test_1" Column | Type | Value ---------------+---------+--------------------- sequence_name | name | seq_test_1 last_value | bigint | 201 start_value | bigint | 200 increment_by | bigint | 1 max_value | bigint | 9223372036854775807 min_value | bigint | 1 cache_value | bigint | 1 log_cnt | bigint | 31 is_cycled | boolean | f is_called | boolean | t
说明把序列的值修改为200(当前的序列值)
相关文章推荐
- oracle_fdw的使用:从PostgreSQL中访问Oracle数据库,实现数据库数据的同步
- 使用Sqoop 对 Oracle 做数据迁移 到 PostgreSQL
- Oracle不同数据库同步Merge方法,可以部分替代高级复制。对小数据量同步问题不大。转载http://blog.chinaunix.net/u1/55091/showart_430716.html
- 使用db link 把ORACLE 数据库中的表复制到另外一个数据库,也可以把表中的数据从一个库复制到另外一个库的表
- postgresql数据库使用函数查询所有符合条件的表名,以及删除所有查询到的表的数据
- oracle 重建索引以及导出所有的索引脚本(可以解决还原数据库文件时先还原数据,在重新用脚本创建索引)
- 数据库表没有单一主键时,可以使用ROWID作为主键删除数据(Oracle)
- 数据库迁移时Excel列格式错误导致数据丢失的问题-Oracle-Datapump
- 使用Oracle的IMP/IMPDP迁移ArcSDE数据库常见问题-ORA-20091和ORA-39083
- FMDB性能优化问题。使用FMDB事务批量更新数据库速度问题。(亲测可以呀---740条数据用和不用事务效率差别20倍+)
- Vista 下使用Visual Studio 2005 开发Oracle 方面程序出现的数据连结问题及解决方案
- Oracle使用超大SQL脚本文件恢复数据问题记录
- oracle 数据迁移工具 oracle sql developer的使用(2)
- Postgresql 数据库备份恢复,序列值问题
- asp.net sql语句中where条件存在中文在程序中取不出数据,在数据库中可以正常取值,数据库为oracle
- django 使用 oracle 数据库的问题
- 使用hibernate查询时,查询的数据和数据库的不一样问题
- ofbiz中使用Oracle 数据库配置解决时间格式问题
- 数据迁移,Oracle,Mysql,Sql server,数据库数据传输
- Mac上使用Ora2Pg迁移Oracle到PostgreSQL