سؤال

لدي طاولة تم إنشاؤها بواسطة Gorm (مجال الشجر). لديها مفتاح خارجي / مؤشر تم إنشاؤه أحرف عشوائية مثل FKAC7AAF67162A158F. أحتاج إلى إزالة هذا الحقل الذي لم يعد مطلوبا بعد الآن.

المشاكل، لدي بعض الخوادم التي تحتاج إلى تحديث. لذلك أحتاج إلى إنشاء هجرة باستخدام كيوباز. ولكن ليس لدي أي فكرة عن كيفية إزالة هذا الفهرس كولصال إذا كان الفهرس باسم عشوائي (كل خادم يحتوي على اسم مختلف).

هل من الممكن إسقاط مؤشر لشيء ما دون معرفة اسمه؟

هل كانت مفيدة؟

المحلول

يمكنك إزالة الفهرس باستخدام البرنامج المساعد "ترحيل قاعدة البيانات" (Liquibase). يتطلب منك معرفة اسم الفهرس، ولكن يجب أن يكون هذا الاسم في إحدى هجراتك السابقة.

// older index added in a previous release  
changeSet(author: "frank", id: "1354228052849-1") {
    createIndex(indexName: "FKAC7AAF67162A158F", tableName: "answer_option") {
        column(name: "question_id")
    }
}

إنشاء ترحيل جديد لإزالة الفهرس.

changeSet(author: "joe@example.com", id: "1381257863746-1") {
    dropIndex(indexName: "FKAC7AAF67162A158F", tableName: "answer_option")
}

نصائح أخرى

بحسب ال mysql دليل...

SHOW INDEX FROM mydb.mytable;

سوف ترجع معلومات عن mytable. تقوم بإرجاع العديد من الحقول مع معلومات حول الجدول ومؤشرها، بما في ذلك Column_name و key_name مجالات. ربما يمكنك فرز أي واحد تحتاجه.

بعد ذلك، يجب أن تكون قادرا على تنفيذ هذا:

DROP INDEX index_name ON tbl_name

والازدهار، لا مزيد من المؤشر.

إذا كنت ترغب في البرامج النصية فهرس الإسقاط من Loqubase، فستحتاج إلى القيام ببعض البرمجة النصية نظرا لأن مؤشر الإسقاط القياسي يتطلب اسم الفهرس.

خيار واحد هو استخدام تغيير مخصص الفئة باستخدام SQL من إجابة فرانك أو الوصول إلى بيانات التعريف JDBC للحصول على اسم الفهرس الفعلي من جدول مرت.

سيكون هناك خيار آخر هو إنشاء إجراء مخزن يأخذ اسم جدول كمعلمة واستفسار المعلومات_Schema للحصول على اسم الفهرس الصحيح ثم يسقطه.

هناك طريقة أخرى للقيام بذلك مع Liquibase هي القيام بما يلي:

changeSet(author: "joe@example.com", id: "1381257863746-1") { sql('DROP INDEX FKAC7AAF67162A158F') }

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top