PostgreSQL: 資料移轉之序列問題(也可以使用在所有使用序列資料庫上,比如Oracle)

來源:互聯網
上載者:User
一、問題背景:

           今天在做一個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(當前的序列值)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.