में प्राथमिक कुंजी कॉलम में ऑटो वृद्धि वापस जोड़ें गलती से मैंने अपनी तालिका के आईडी फ़ील्ड से ऑटोइनक्रिकमेंट विकल्प हटा दिया। क्या कोई मुझे बता सकता है कि मैं माइग्रेशन के माध्यम से वापस ऑटोइनक्रिकमेंट के विकल्प को फिर से जोड़ सकता हूं?रेल
Q
रेल
13
A
उत्तर
18
प्रयास करें:
change_column :my_table, :id, :primary_key
या
my_table.change_column :id, :primary_key
कुछ रेल डेटाबेस एडेप्टर आप प्राथमिक कुंजी पर change_column
कॉल नहीं कर सकते। अगर ऐसा है तो आप हमेशा सीधे एसक्यूएल का उपयोग कर परिवर्तन प्रदर्शन करने के लिए execute
कॉल कर सकते हैं:
MySQL:
execute('ALTER TABLE "my_table" CHANGE "id" "id"
bigint DEFAULT NULL auto_increment PRIMARY KEY')
PostgreSQL (विधि 1):
max_id = execute(%%Q{SELECT id FROM "my_table" ORDER BY "id" DESC
LIMIT 1}).to_a.first
execute(%%Q{CREATE SEQUENCE "my_table_id_seq" START #{max_id+1}})
execute(%%Q{ALTER TABLE "my_table" ALTER COLUMN "id"
TYPE bigint})
execute(%%Q{ALTER TABLE "my_table" ALTER COLUMN "id"
SET DEFAULT nextval('my_table_id_seq'::regclass)})
execute(%%Q{ALTER TABLE "my_table" ADD PRIMARY KEY("id")})
PostgreSQL (2 विधि) :
max_id = execute(%%Q{SELECT "id" FROM "my_table" ORDER BY "id" DESC
LIMIT 1}).to_a.first
execute(%%Q{ALTER TABLE "my_table" RENAME COLUMN "id" TO "id_orig"})
execute(%%Q{ALTER TABLE "my_table" ADD COLUMN "id" bigserial NOT NULL})
execute(%%Q{UPDATE "my_table" SET "id"="id_orig"})
execute(%%Q{ALTER SEQUENCE "my_table_id_seq" RESTART #{max_id+1}})
execute(%%Q{ALTER TABLE "my_table" DROP COLUMN "id_orig"})
यदि आप bigint
का उपयोग नहीं करना चाहते हैं/bigserial
(64-बिट), int(11)
/integer
/serial
का उपयोग करें।
1
आपका पोस्टग्रेस कोड काम नहीं करता है, एक वैकल्पिक तालिका कथन में धारावाहिक या bigserial का उपयोग करना असंभव है। PostgreSQL के लिए सही एसक्यूएल
ALTER TABLE table ALTER COLUMN id TYPE int
ALTER TABLE table ALTER COLUMN id TYPE bigint
3
मैं अन्य संस्करणों की जांच नहीं की, बल्कि ऑन रेल्स 5 तुम सिर्फ auto_increment
विकल्प सेट कर सकते हैं:
change_column :table_name, :id, :bigint, null: false, unique: true, auto_increment: true
:
change_column :table_name, :id, :int, null: false, unique: true, auto_increment: true
या आप एक bigint चाहते हैं
संबंधित मुद्दे
यार प्रतिक्रिया के लिए Thnx, लेकिन मैंने वास्तव में कुछ प्राथमिक कुंजी पर change_column पहले से ही किया है। यही कारण है कि यह प्राथमिक कुंजी विकल्प से पहले से ही मौजूदा ऑटो वृद्धि विकल्प को हटा दिया गया है। –
कोई समस्या नहीं है। मेरा अपडेट देखें। – vladr