数据迁移之序列问题

上一篇 / 下一篇  2013-10-31 13:38:01 / 个人分类:Database

一、问题背景:

           今天在做一个OA系统,原先的数据库Oracle的,后来改到Postgresql数据库,一开始把数据库迁移到Postgresql上来,序列和建表 都通过Oracle导出的sql语句来完成,没有考虑到序列在重新创建后,会重新重初始值开始计算,让我遇到了现在的问题,新的数据无法插入。这个让我想 起了以前在华为时候,一位DBA跟我说过,数据在迁移的时候一定要先check序列的问题,现在想起来确实,呵呵。

二、如何解决 数据迁移后,序列的问题

           当然对于DBA来说,这个必要做的。

          1、创建序列

                 


  1. skytf=> create sequence seq_test_1 INCREMENT by 1 MINVALUE 1   NO MAXVALUE start with 1 ;  
  2. CREATE SEQUENCE  


          2、查看序列属性


  1. skytf=> \d seq_test_1  
  2.          Sequence "skytf.seq_test_1"  
  3.    Column     |  Type   |        Value          
  4. --------------+---------+---------------------  
  5. sequence_name | name    | seq_test_1  
  6. last_value    | bigint  | 1  
  7. start_value   | bigint  | 1  
  8. increment_by  | bigint  | 1  
  9. max_value     | bigint  | 9223372036854775807  
  10. min_value     | bigint  | 1  
  11. cache_value   | bigint  | 1  
  12. log_cnt       | bigint  | 0  
  13. is_cycled     | boolean | f  
  14. is_called     | boolean | f  


    3、查看序列的Next值


  1. skytf=> select nextval('seq_test_1');  
  2.  nextval   
  3. ---------  
  4.        1  
  5. (1 row)   
  6. skytf=> select nextval('seq_test_1');  
  7.  nextval   
  8. ---------  
  9.        2  
  10. (1 row)  


4、查看序列最近使用的值或说是当前值是什么


  1. skytf=> select currval('seq_test_1');  
  2.  currval   
  3. ---------  
  4.        2  
  5. (1 row)   
  6. skytf=> select currval('seq_test_1');  
  7.  currval   
  8. ---------  
  9.        2  
  10. (1 row)  

5、那么如何解决呢?重置下序列的值
     

      方法一:


  1. skytf=> select setval('seq_test_1',100);  
  2.  setval   
  3. --------  
  4.     100  
  5. (1 row)   
  6. skytf=> select currval('seq_test_1');  
  7.  currval   
  8. ---------  
  9.      100  
  10. (1 row)  
  11.   
  12. skytf=> select nextval('seq_test_1');  
  13.  nextval   
  14. ---------  
  15.      101  
  16. (1 row)  
  17.   
  18. 说明:把序列修改为100  


方法二:


  1. skytf=> alter sequence seq_test_1 restart with 200;  
  2. ALTER SEQUENCE   
  3. skytf=> select nextval('seq_test_1');  
  4.  nextval   
  5. ---------  
  6.      200  
  7. (1 row)  
  8.   
  9. skytf=> select nextval('seq_test_1');  
  10.  nextval   
  11. ---------  
  12.      201  
  13. (1 row)  
  14.   
  15. skytf=> \d seq_test_1  
  16.           Sequence "skytf.seq_test_1"  
  17.     Column     |  Type   |        Value          
  18. ---------------+---------+---------------------  
  19.  sequence_name | name    | seq_test_1  
  20.  last_value    | bigint  | 201  
  21.  start_value   | bigint  | 200  
  22.  increment_by  | bigint  | 1  
  23.  max_value     | bigint  | 9223372036854775807  
  24.  min_value     | bigint  | 1  
  25.  cache_value   | bigint  | 1  
  26.  log_cnt       | bigint  | 31  
  27.  is_cycled     | boolean | f  
  28.  is_called     | boolean | t 

TAG:

 

评分:0

我来说两句

日历

« 2024-04-20  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 34074
  • 日志数: 51
  • 建立时间: 2013-05-02
  • 更新时间: 2013-11-15

RSS订阅

Open Toolbar