В случае изменения схемы для расширения, 1002 * LoadExtensionSchemaUpdates страница подключения - правильное место для поиска.
LoadExtensionSchemaUpdates подключение
запускается при обновлении MediaWiki (php maintenance / update.php), чтобы позволить расширениям обновлять базу данных
Если вы посмотрите на ArticleFeedbackv5. sql file , вот как должен выглядеть sql file
CREATE TABLE IF NOT EXISTS /*_*/aft_feedback (
-- id is no auto-increment, but a in PHP generated unique value
aft_id binary(32) NOT NULL PRIMARY KEY,
aft_page integer unsigned NOT NULL,
...
) /*$wgDBTableOptions*/;
-- sort indexes (central feedback page; lots of data - more details indexes for most popular actions)
CREATE INDEX /*i*/relevance ON /*_*/aft_feedback (aft_relevance_score, aft_id, aft_has_comment, aft_oversight, aft_archive, aft_hide);
CREATE INDEX /*i*/age ON /*_*/aft_feedback (aft_timestamp, aft_id, aft_has_comment, aft_oversight, aft_archive, aft_hide);
CREATE INDEX /*i*/helpful ON /*_*/aft_feedback (aft_net_helpful, aft_id, aft_has_comment, aft_oversight, aft_archive, aft_hide);
-- page-specific
CREATE INDEX /*i*/relevance_page ON /*_*/aft_feedback (aft_page, aft_relevance_score);
CREATE INDEX /*i*/age_page ON /*_*/aft_feedback (aft_page, aft_timestamp);
CREATE INDEX /*i*/helpful_page ON /*_*/aft_feedback (aft_page, aft_net_helpful);
-- index for archive-job
CREATE INDEX /*i*/archive_queue ON /*_*/aft_feedback (aft_archive, aft_archive_date);
-- index for mycontribs data
CREATE INDEX /*i*/contribs ON /*_*/aft_feedback (aft_user, aft_timestamp);
CREATE INDEX /*i*/contribs_anon ON /*_*/aft_feedback (aft_user, aft_user_text, aft_timestamp);
И затем вы ссылаетесь на этот файл в hook в файле хука
public static function loadExtensionSchemaUpdates( $updater = null ) {
// that's for adding a table
$updater->addExtensionTable(
'aft_feedback',
dirname( __FILE__ ) . '/sql/ArticleFeedbackv5.sql' //that's the previous sql file
);
...
}
Не забудьте добавить хук в секцию хука в вашем файле extension.json
. Таблица будет создана, когда вы запустите файл update.php
.
Что касается вашего вопроса о создании файла для каждого механизма базы данных, мы не можем использовать один и тот же файл для каждого из них, так как могут быть некоторыеразличия в запросах. Посмотрите, что сказал Tgr .
Если вы еще этого не сделали, взгляните на файл hook .
protected function execute() {
switch ( $this->updater->getDB()->getType() ) {
case 'mysql':
case 'sqlite':
$this->updater->addExtensionTable( 'oathauth_users', "{$this->base}/sql/mysql/tables.sql" );
$this->updater->addExtensionUpdate( [ [ $this, 'schemaUpdateOldUsersFromInstaller' ] ] );
$this->updater->dropExtensionField(
'oathauth_users',
'secret_reset',
"{$this->base}/sql/mysql/patch-remove_reset.sql"
);
$this->updater->addExtensionField(
'oathauth_users',
'module',
"{$this->base}/sql/mysql/patch-add_generic_fields.sql"
);
$this->updater->addExtensionUpdate(
[ [ __CLASS__, 'schemaUpdateSubstituteForGenericFields' ] ]
);
$this->updater->dropExtensionField(
'oathauth_users',
'secret',
"{$this->base}/sql/mysql/patch-remove_module_specific_fields.sql"
);
/*$this->updaterAddExtensionUpdate(
[ [ __CLASS__, 'schemaUpdateTOTPToMultipleKeys' ] ]
);*/
break;
case 'oracle':
$this->updater->addExtensionTable( 'oathauth_users', "{$this->base}/sql/oracle/tables.sql" );
break;
case 'postgres':
$this->updater->addExtensionTable( 'oathauth_users', "{$this->base}/sql/postgres/tables.sql" );
break;
}
return true;
}