SORU
1 Ocak 2012, Pazar


Raylar uzun dizeleri sütun türünü değiştirme

İlk göç, bir sütun content dize olarak ilan ettim Activerecord bunu string(255) gem açıklama göre yapılmış.

PostgreSQL kullanan heroku, uygulama basarım sonra, içerik şeklinde bir dizesi 255 karakterden daha içeri girersem hatası alıyorum

PGError: ERROR: value too long for type character varying(255)

Sorun, içeriği belki (serbest metin, karakter binlerce olabilir) çok uzun bir dize içeren ihtiyacım var

  1. Değişken (dize bunun için uygun değildir) pg kabul eder miydi?
  2. Nasıl bu sütun türünü değiştirmek için bir geçiş oluştururum

teşekkürler

CEVAP
1 Ocak 2012, Pazar


Eğer hiçbir sınırı uzunluğu ile bir dize istiyorsanız Raylar text kullanmalısınız. Böyle bir geçiş:

def up
    change_column :your_table, :your_column, :text
end
def down
    # This might cause trouble if you have strings longer
    # than 255 characters.
    change_column :your_table, :your_column, :string
end

tür şeyler gerekir. O da sonunda :null => false ya da bazı diğer seçenekler isteyebilirsiniz.

Açık bir sınır olmadan string bir sütun kullandığınızda, Raylar örtülü :limit => 255 ekleyecektir. Ama eğer kullanıyorsanız text veritabanı destekler neyse alacaksın. PostgreSQL seni uzunluğu olmadan varchar bir sütun kullanmak için izin verir ama çoğu veritabanı için ayrı bir türünü kullanın ve Raylar uzunluğu olmadan varchar haberi yok. Raylar text PostgreSQL text column. Orada 15* text *türünde bir sütun ve türde bir PostgreSQL arasında fark yok (ama 16**farklı). Ayrıca, eğer sen dağıtma üstünde PostgreSQL, sebep yok etmek için kullanın :string (AKA varchar), veritabanı davranır text varchar(n) aynı içten dışında ekstra uzunluk kısıtlamaları için varchar(n); tek kullanım varchar(n) (AKA :string) eğer bir dış kısıtlama gibi bir hükümet kurmak olduğunu söyleyen alan 432 formu 897/B olacak 23 karakter uzunluğunda) sütun boyutu.

Bir kenara olarak, eğer kullanıyorsanız string sütun her yerde, her zaman belirtin :limit bir hatırlatma olarak kendinizi bir sınırı yok doğrulama modeli sağlamak için sınır aşılmaması. Eğer aşan sınırı, PostgreSQL olacak şikayet ve yükseltmek için bir istisna, MySQL olacak sessizce kesecek dize veya şikayet (bağlı sunucu yapılandırma), SQLite olacak izin geçerken-ve diğer veritabanları yapacak başka bir şey (muhtemelen şikayet).

Ayrıca, test geliştirmek gerekir, ve aynı veritabanı genellikle Heroku de PostgreSQL olacak olan) üzerine dağıtma, hatta veritabanı sunucusu aynı sürümlerini kullanmalısınız. ActiveRecord sizi izole olmayacak veritabanları arasındaki diğer farklar (GRUP davranışı) vardır. Zaten bu yapıyor olabilir ama yine de bahsetmek istedim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Mark Brown

    Mark Brown

    9 HAZİRAN 2010
  • michaeljacksonVEVO

    michaeljacks

    2 EYLÜL 2009
  • Sean Murphy

    Sean Murphy

    4 ŞUBAT 2009