numaralı anahtardaki birincil anahtar sütuna otomatik artış ekleyin. Yanlışlıkla tablonun kimlik alanından otomatik ödeme seçeneğini kaldırdım. Göç yoluyla geri dönüş seçeneğini nasıl yeniden eski haline getirebileceğimi söyleyen var mı?Rails
Q
Rails
13
A
cevap
18
Dene:
change_column :my_table, :id, :primary_key
veya
my_table.change_column :id, :primary_key
Bazı Raylar veritabanı adaptörleri birincil anahtara change_column
diyelim olmayabilir. Bu durumda o zaman her zaman doğrudan SQL kullanarak değişiklik gerçekleştirmek için execute
çağırabilirsiniz:
MySQL:
execute('ALTER TABLE "my_table" CHANGE "id" "id"
bigint DEFAULT NULL auto_increment PRIMARY KEY')
PostgreSQL (Yöntem 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 yöntemi) :
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"})
Eğer bigint
kullanmak istemiyorsanız/bigserial
(64-bit) yerine, int(11)
/integer
/serial
kullanın.
1
Sizin Postgres kodunuz çalışmıyor, ALTER TABLE deyiminde seri veya bigserial kullanmak imkansız. PostgreSQL için Doğru SQL
ALTER TABLE table ALTER COLUMN id TYPE int
ALTER TABLE table ALTER COLUMN id TYPE bigint
3
ben başka sürümler kontrol etmedi ama Raylar 5 üzerinde sadece auto_increment
seçeneği ayarlayabilirsiniz geçerli:
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
Veya bir bigint isterseniz
İlgili konular
- 1. (Ruby, Rails) (Ruby, Rails)
- 2. Rails
- 3. Rails
- 4. Rails
- 5. Rails
- 6. Rails
- 7. Rails
- 8. Rails
- 9. Rails
- 10. Rails
- 11. Rails,
- 12. Rails
- 13. Rails
- 14. Rails
- 15. Rails
- 16. Rails
- 17. Rails
- 18. Rails
- 19. Rails
- 20. Rails
- 21. Rails
- 22. Rails
- 23. Rails
- 24. Rails
- 25. Rails
- 26. Rails
- 27. Rails
- 28. Rails
- 29. Rails
- 30. Rails
Yor yanıtı için Thnx, Ama aslında birincil anahtarların bazılarında change_column işlemini tamamlamış oldum.Ancak bu yüzden zaten var olan Otomatik Artış seçeneğini birincil anahtar seçeneğinden kaldırmış olabilir. –
Sorun değil. Güncellemeye bakın. – vladr