ما هي أفضل طريقة للتحقق من سلامة قاعدة البيانات؟

أريد دمج المستخدمين والمواضيع والمنشورات من منتدى إلى آخر. وفي حين أن استعادة المنتدى على بيئة تطوير تتم دون مشاكل، إلا أنني أواجه أخطاء PG::ForeignKeyViolation عند محاولة الدمج (حاليًا إلى تثبيت جديد)… لذا تساءلت عما إذا كانت هناك أداة Discourse يمكنها التحقق من سلامة قاعدة البيانات؟ وإذا لم تكن متوفرة، هل توجد أي نصائح أو أفكار أخرى؟

(كانت هناك أيضًا بعض المواضيع حول مشاكل قاعدة البيانات، لذا أتساءل عما إذا كان فريق DC يعتبر من الجدير بالاهتمام توفير أداة من هذا النوع إذا لم تكن متاحة حاليًا؟)

لقد قمت يدوياً بمقارنة المخططات (schemas) بين منتدى Discourse تم إنشاؤه قبل أكثر من 5 سنوات وبين تثبيت جديد، ويمكنك رؤية الفروقات هنا:

https://www.diffchecker.com/lZrp2jxJ

معظم التغييرات تتعلق بتحويل bigint إلى integer وcharacter varying(255) إلى character varying، مع غياب بعض قيود not null، ولكن هناك أيضاً بعض الفهارس المفقودة.

إليك الأسطر التي توضح ذلك:

السطر 1646 - مفقود:

  Index "public.index_badges_on_badge_type_id"
 Column |          Type          | Key? | Definition 		    Column     |  Type   | Key? |  Definition   
--------+------------------------+------+------------		---------------+---------+------+---------------
 name   | character varying(255) | yes  | name		 badge_type_id | integer | yes  | badge_type_id
btree, for table "public.badges"

3301 - مفقود:

	Index "public.index_user_badges_on_user_id"
 Column  |  Type   | Key? | Definition 
---------+---------+------+------------
 user_id | integer | yes  | user_id
btree, for table "public.user_badges"

4639 - مفقود:

	      Index "public.schema_migrations_pkey"
 Column  |       Type        | Key? | Definition 
---------+-------------------+------+------------
 version | character varying | yes  | version
primary key, btree, for table "public.schema_migrations"

5487 - مفقود جزئياً:

                                       Table "public.topic_search_data"
   Column    |          Type          | Collation | Nullable | Default 		   Column    |       Type        | Collation | Nullable |                       Default                       
-------------+------------------------+-----------+----------+---------		-------------+-------------------+-----------+----------+-----------------------------------------------------
 topic_id    | integer                |           | not null | 		 topic_id    | integer           |           | not null | nextval('topic_search_data_topic_id_seq'::regclass)
 raw_data    | text                   |           |          | 		 raw_data    | text              |           |          | 
 locale      | character varying(255) |           | not null | 		 locale      | character varying |           | not null | 
 search_data | tsvector               |           |          | 		 search_data | tsvector          |           |          | 
 version     | integer                |           |          | 0		 version     | integer           |           |          | 0

5506 - مفقود:

           Sequence "public.topic_search_data_topic_id_seq"
  Type   | Start | Minimum |  Maximum   | Increment | Cycles? | Cache 
---------+-------+---------+------------+-----------+---------+-------
 integer |     1 |       1 | 2147483647 |         1 | no      |     1
Owned by: public.topic_search_data.topic_id

6044 - مفقود:

    "index_user_badges_on_user_id" btree (user_id)

هل يجب أن أقلق بشأن أي شيء هنا؟ هل يجب أن أضيف الفهارس يدوياً؟ هل هناك أي أفكار أخرى أو أي شيء آخر يلفت الانتباه؟ (الساعة الآن حوالي 5 صباحاً وأنا أواجه صعوبة في إبقاء عيني مفتوحتين :see_no_evil:)