我忙於在Grails項目上進行從MySQL到Postgres的相當複雜的數據遷移。Grails生成
我使用GORM在PostGres中生成模式,然後執行MySQL-> mysqldump,執行一些數據操作,然後導入到Postgres中。
很明顯,每個從MySQL到PSQL的人都認爲是id列上的auto_inc。其結果是,我已經添加了以下映射到每個域對象(根據不同的網站和引導指令),這應該管理所有的測序id列:
static mapping = { id generator: 'sequence' }
但是做一個\ d +帳戶我看到下面的行:
public.product ----------------------+-----------------------------+-----------+----------+- id | bigint | not null | plain |
...這是有點不同,我所期望的(我希望它是一個串行或bigserial)。因此,無論如何,我都會遷移數據,然後啓動應用程序,然後通過/ product/create操作添加產品來測試。沒有骰子,我可以看到一個hibernate異常彈出,抱怨唯一的鍵(插入語句試圖使用2的一個id
)。我刷新頁面幾次(使更多的失敗,但增加nextval),最終它得到到142(表中目前有141個產品),然後它成功了。顯然,我必須更新表中使用的每個id序列的nextval。很遺憾,我無法真正瞭解wtf Grails是作爲序列,因爲它沒有被表引用,在DB中也沒有任何新表。
我已閱讀(How to reset postgres' primary key sequence when it falls out of sync?)的提示,但由於沒有主鍵上的序列。
我可以使用min_lo值(if sequence
方法甚至考慮非hilo策略的下界),但理想情況下,我希望能夠運行一些SQL來修復遷移後的情況。
乾杯。
編輯:PostGreSQL 9.1,Grails 2.0.3(是的,這將在遷移後更新)。
是,問題沒有更新序列(我給解決了這個鏈接),它實際上只是找到其中/序列實際上是如何存儲,如果不是在一個表中數據庫。 – Noxville 2013-05-07 07:40:57
序列是數據庫對象。它們存儲在內存中。 – 2013-05-07 13:16:17