DatabaseSchema_pgsql :: changeField ve db_change_field () içinde bildirildiği gibi :
ÖNEMLİ NOT: Veritabanı taşınabilirliğini korumak için, değiştirilen alanı kullanan tüm dizinleri ve birincil anahtarları açıkça yeniden oluşturmanız gerekir.
Bu, db_change_field () öğesini çağırmadan önce, etkilenen tüm anahtarları ve dizinleri db_drop_ {Primary_key, unique_key, index} () ile düşürmeniz gerektiği anlamına gelir. Anahtarları ve dizinleri yeniden oluşturmak için, anahtar tanımları isteğe bağlı $ new_keys bağımsız değişkeni olarak doğrudan db_change_field () öğesine iletin.
Örneğin, varsayalım:
$schema['foo'] = array(
'fields' => array(
'bar' => array('type' => 'int', 'not null' => TRUE)
),
'primary key' => array('bar')
);
foo.bar yazın ve seriyi birincil anahtar olarak bırakın. Doğru sıra:
db_drop_primary_key($ret, 'foo');
db_change_field($ret, 'foo', 'bar', 'bar',
array('type' => 'serial', 'not null' => TRUE),
array('primary key' => array('bar'))
);
Benzer kod Drupal 7 için de bildirilmiştir.
Deneyimlerime göre, seri alan kullanan birincil anahtarı kaldıramayacağınızı unutmayın. Drupal 6'da bunu yapmaya çalıştığımda her zaman bir hata aldım; Bunu Drupal 7'de denemedim.
Bunun dışında, veritabanı dizinleri ile ilgili başka bir sorun bilmiyorum.
Başka bir modülden oluşturulan bir veritabanı tablosuna bir dizin ekleme hakkında, bunu yapmanızı tavsiye etmem, çünkü:
- Modülün kendisi bu dizini oluşturmadıysa, bir modül değiştirilen bir alanın dizinini bırakmaz. Dizin adını bilmediği için modülün bunu yapması mümkün olmaz.
- Modülün çekirdek bir modül olması durumunda bile, başka bir modül tarafından oluşturulan bir veritabanı tablosunu değiştirmek asla iyi bir fikir değildir. Aynı tabloyu değiştiren başka bir modül varsa, modüller birbirleriyle olan çatışmaları veya çekirdek modülün kendi veritabanına uygulayacağı değişikliklerle nasıl başa çıkabilir?
Veritabanı tablosu başka bir modülden (çekirdek modül veya üçüncü taraf modül) oluşturuluyorsa, modül için yeni bir dizin kullanmak için bir kullanım durumu sağlayarak bir özellik isteği açmanızı öneririm; herhangi bir performans sorunu varsa, dizin eklemek istediğiniz şey olabilir.
Başka bir modülden oluşturulan bir tabloya kendi sitenize bir dizin ekleyecekseniz, modül her güncellendiğinde ve kendi sitenize kurmadan önce özel modülünüzde yapmanız gereken değişikliklere hazırlıklı olun .
Ekstra çalışmanın elde ettiğiniz performansa değip değmeyeceğine siz karar verebilirsiniz. Şahsen, buna değdiğini sanmıyorum.