更新後にDigikamが起動しない:データベーススキーマをバージョン12からバージョン13に更新できません。

更新後にDigikamが起動しない:データベーススキーマをバージョン12からバージョン13に更新できません。

私はArchlinuxでDigikamを実行しており、写真データベースはMariaDBに保存されています。最近のアップグレードまではうまくいきました。 Digikamを開こうとすると、次のものが返されます。

バージョン12からバージョン13へのデータベーススキーマを更新できません。コンソールに印刷されたエラーメッセージを読み、このエラーをbugs.kde.orgにバグとして報告してください。

コンソールで開くと、次のメッセージが表示されます。

digikam.coredb:コアデータベース:スキーマ初期化を処理できません。 QThreadStorage: QThreadStorage 13 が削除された後、スレッド 0x7f77f1091560 が終了しました。

答え1

私の場合、次の場所にdbconfig.xmlファイルがあります。

/usr/share/digikam/database/dbconfig.xml

このファイルには、実行する必要があるSQLコマンドが含まれています。この場合、次のコードを分離しました。

DROP PROCEDURE IF EXISTS create_index_if_not_exists;

CREATE PROCEDURE create_index_if_not_exists(table_name_vc varchar(50), index_name_vc varchar(50), field_list_vc varchar(1024))
BEGIN

set @Index_cnt = (
    SELECT COUNT(1) cnt
    FROM INFORMATION_SCHEMA.STATISTICS
    WHERE CONVERT(DATABASE() USING latin1) = CONVERT(TABLE_SCHEMA USING latin1)
      AND CONVERT(table_name USING latin1) = CONVERT(table_name_vc USING latin1)
      AND CONVERT(index_name USING latin1) = CONVERT(index_name_vc USING latin1)
);

IF IFNULL(@Index_cnt, 0) = 0 THEN
    set @index_sql = CONCAT(
        CONVERT( 'ALTER TABLE ' USING latin1),
        CONVERT( table_name_vc USING latin1),
        CONVERT( ' ADD INDEX ' USING latin1),
        CONVERT( index_name_vc USING latin1),
        CONVERT( '(' USING latin1),
        CONVERT( field_list_vc USING latin1),
        CONVERT( ');' USING latin1)
    );
    PREPARE stmt FROM @index_sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END IF;
                    END;

CALL create_index_if_not_exists('TagsTree','tagstree_id_index','id');

CALL create_index_if_not_exists('TagsTree','tagstree_pid_index','pid');

ALTER TABLE UniqueHashes CHANGE uniqueHash uniqueHash VARCHAR(128);

CREATE TABLE IF NOT EXISTS CustomIdentifiers
                    (identifier LONGTEXT CHARACTER SET utf8,
                    thumbId INTEGER,
                    UNIQUE(identifier(333)));

CALL create_index_if_not_exists('CustomIdentifiers','id_customIdentifiers','thumbId');

ALTER TABLE Settings RENAME ThumbSettings;

ALTER TABLE ThumbSettings
                    MODIFY COLUMN keyword VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci,
                    MODIFY COLUMN value LONGTEXT CHARACTER SET utf8 COLLATE utf8_general_ci;

ALTER TABLE ThumbSettings ENGINE InnoDB;
ALTER TABLE Thumbnails ENGINE InnoDB;
ALTER TABLE UniqueHashes ENGINE InnoDB;
ALTER TABLE FilePaths MODIFY COLUMN path VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE FilePaths ENGINE InnoDB;
ALTER TABLE CustomIdentifiers MODIFY COLUMN identifier VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE CustomIdentifiers ENGINE InnoDB;

                ALTER TABLE UniqueHashes
                    ADD CONSTRAINT UniqueHashes_Thumbnails FOREIGN KEY (thumbId) REFERENCES Thumbnails (id) ON DELETE CASCADE ON UPDATE CASCADE;

                ALTER TABLE FilePaths
                    ADD CONSTRAINT FilePaths_Thumbnails FOREIGN KEY (thumbId) REFERENCES Thumbnails (id) ON DELETE CASCADE ON UPDATE CASCADE;

                ALTER TABLE CustomIdentifiers
                    ADD CONSTRAINT CustomIdentifiers_Thumbnails FOREIGN KEY (thumbId) REFERENCES Thumbnails (id) ON DELETE CASCADE ON UPDATE CASCADE;

OPTIMIZE TABLE Albums, Images, ImageInformation, ImageMetadata, VideoMetadata, ImagePositions, ImageComments, ImageCopyright, ImageProperties, ImageHistory, ImageRelations, Tags, ImageTags, ImageTagProperties;
OPTIMIZE TABLE Thumbnails, UniqueHashes, FilePaths, CustomIdentifiers;
OPTIMIZE TABLE Identities, IdentityAttributes;
OPTIMIZE TABLE ImageSimilarity, ImageHaarMatrix, SimilaritySettings;
CHECK TABLE Albums, Images, ImageInformation, ImageMetadata, VideoMetadata, ImagePositions, ImageComments, ImageCopyright, ImageProperties, ImageHistory, ImageRelations, Tags, ImageTags, ImageTagProperties;
CHECK TABLE Thumbnails, UniqueHashes, FilePaths, CustomIdentifiers;
CHECK TABLE Identities, IdentityAttributes;
CHECK TABLE ImageSimilarity, ImageHaarMatrix, SimilaritySettings;

私の写真が保存されているデータベースから直接実行します。いくつかのエラーがありましたが、このデジタルカメラを起動した後、正常に動作し始め、すべてが順調に見えました。

答え2

残念ながら@user74934の答えについては言及できませんが、彼のコードを実行してみるとERROR 1728 (HY000): Cannot load from mysql.proc. The table is probably corruptedmariadbエラーが発生しました。

誰でもこの問題を発見したら、StackOverflowにインスピレーションを得て問題を解決できます。回答mariadb-upgrade --socket=mysql.socket digikamインスタンスを回復するために、次のコマンドを実行しました。

関連情報