Rails db:migrate error, index is too long

問(wèn)題發(fā)現(xiàn)

今天在跑migrate,代碼如下:

class CreateReconciliationOrderItems < ActiveRecord::Migration[5.1]
  def change
    create_table :reconciliation_order_items do |t|
      t.string  :kind
      t.string  :month
      t.text    :content
      t.string  :status
      t.string  :type
      t.references :reconciliation
      t.references :reconciliation_result_set
      t.string  :internal_source_type
      t.string  :internal_source_id
      t.timestamps null: false
    end
  end
end

數(shù)據(jù)庫(kù)報(bào)了一個(gè)錯(cuò)誤:

   (0.3ms)  SELECT pg_try_advisory_lock(5675054488983918780)
   (1.4ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
Migrating to CreateReconciliationOrderItems (20180116061824)
   (0.2ms)  BEGIN
== 20180116061824 CreateReconciliationOrderItems: migrating ===================
-- create_table(:reconciliation_order_items)
   (21.0ms)  CREATE TABLE "reconciliation_order_items" ("id" bigserial primary key, "kind" character varying, "month" character varying, "content" text, "status" character varying, "type" character varying, "reconciliation_id" bigint, "reconciliation_result_set_id" bigint, "internal_source_type" character varying, "internal_source_id" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)
   (1.0ms)  CREATE  INDEX  "index_reconciliation_order_items_on_reconciliation_id" ON "reconciliation_order_items"  ("reconciliation_id")
   (1.6ms)  ROLLBACK
   (0.3ms)  SELECT pg_advisory_unlock(5675054488983918780)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

Index name 'index_reconciliation_order_items_on_reconciliation_result_set_id' on table 'reconciliation_order_items' is too long; the limit is 63 characters

重點(diǎn)是在最后一句

Index name 'index_reconciliation_order_items_on_reconciliation_result_set_id' on table 'reconciliation_order_items' is too long; the limit is 63 characters

剛開(kāi)始我并不知道這個(gè)問(wèn)題的所在饶火。只當(dāng)是版本上周升級(jí)rails5的遺留問(wèn)題,并且這個(gè)migrate在線上環(huán)境已經(jīng)跑過(guò)了,問(wèn)題不是特別大,也就每當(dāng)回事。等閑下來(lái)之后查了一下資料艘蹋,網(wǎng)上又很完善的介紹。

pg數(shù)據(jù)庫(kù)文檔中有說(shuō):

The system uses no more than NAMEDATALEN-1 bytes of an identifier; longer names can be written in commands, but they will be truncated. By default, NAMEDATALEN is 64 so the maximum identifier length is 63 bytes. If this limit is problematic, it can be raised by changing the NAMEDATALEN constant in src/include/pg_config_manual.h.

大概意思就是SQL標(biāo)識(shí)符與關(guān)鍵字不能超過(guò)64個(gè)字節(jié)票灰。因此女阀,我們只能創(chuàng)建64-1個(gè)字節(jié),也就是63個(gè)字節(jié)屑迂。為此浸策,rails中有相應(yīng)指明name的方法。
代碼如下

t.references :reconciliation_result_set, index: { name: 'index_on_reconciliation_result_set_id'}

你可以在migrate中直接聲明name的名字惹盼,也可以使用

add_index :reconciliation_order_items, : reconciliation_result_set_id, name: 'index_on_reconciliation_result_set_id'

就是不使用默認(rèn)的聲明名稱庸汗,自定義符合要求的聲明名稱即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末手报,一起剝皮案震驚了整個(gè)濱河市蚯舱,隨后出現(xiàn)的幾起案子改化,更是在濱河造成了極大的恐慌,老刑警劉巖枉昏,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陈肛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡兄裂,警方通過(guò)查閱死者的電腦和手機(jī)句旱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)晰奖,“玉大人谈撒,你說(shuō)我怎么就攤上這事∝夷希” “怎么了啃匿?”我有些...
    開(kāi)封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)午衰。 經(jīng)常有香客問(wèn)我立宜,道長(zhǎng)冒萄,這世上最難降的妖魔是什么臊岸? 我笑而不...
    開(kāi)封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮尊流,結(jié)果婚禮上帅戒,老公的妹妹穿的比我還像新娘。我一直安慰自己崖技,他們只是感情好逻住,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著迎献,像睡著了一般瞎访。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吁恍,一...
    開(kāi)封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天扒秸,我揣著相機(jī)與錄音,去河邊找鬼冀瓦。 笑死伴奥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的翼闽。 我是一名探鬼主播拾徙,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼感局!你這毒婦竟也來(lái)了尼啡?” 一聲冷哼從身側(cè)響起暂衡,我...
    開(kāi)封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎崖瞭,沒(méi)想到半個(gè)月后古徒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡读恃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年隧膘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寺惫。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疹吃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出西雀,到底是詐尸還是另有隱情萨驶,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布艇肴,位于F島的核電站腔呜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏再悼。R本人自食惡果不足惜核畴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望冲九。 院中可真熱鬧谤草,春花似錦、人聲如沸莺奸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)灭贷。三九已至温学,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甚疟,已是汗流浹背仗岖。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留古拴,地道東北人箩帚。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像黄痪,于是被迫代替她去往敵國(guó)和親紧帕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)是嗜,斷路器愈案,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,930評(píng)論 2 89
  • 世界上總有那么一些人站绪,喜歡打著我為你好的幌子,胡亂揣測(cè)別人的生活丽柿。 在他們看來(lái)恢准,自己的行為寫著滿滿的善意,閃閃發(fā)光...
    Su木溪閱讀 933評(píng)論 2 6
  • 為閨蜜寶寶在用著并且代理了甫题,我也就順帶的開(kāi)著淘寶店開(kāi)始賣尿不濕了馁筐,淘寶店開(kāi)業(yè)之后,一直沒(méi)有用心去打理坠非,直到近日陸陸...
    珍眼看世界閱讀 66評(píng)論 0 0
  • 近日炎码,很多地區(qū)都進(jìn)入了可以在馬路上攤雞蛋的高溫季節(jié)了盟迟,相比較古代,現(xiàn)代有了空調(diào)潦闲,電扇等預(yù)防高溫的殺手锏攒菠,不知道幸福...
    保健頭條閱讀 300評(píng)論 2 1