Contexte

J'ai utilisé le fichier AppImage de la dernière version (3.2.4) pour synchroniser mes documents. Un peu plus tard, je me suis rendu compte que NextCloud était disponible depuis les dépôts officiels via un simple :

$ apt install nextcloud-desktop

J'ai donc supprimé le fichier AppImage et installé la version 3.1.1-2 à l'aide d'apt.

Crash

Démarrer NextCloud affiche l'icône dans la zone de notification pendant 1 ou 2 secondes et puis crash, sans erreur apparente.

Dans un terminal, l'erreur se précise :

$ nextcloud
2021-08-06 14:10:37:151 [ fatal default ]:	ENFORCE: "allow_failure" in file ./src/common/ownsql.cpp, line 265 with message: SQLITE Prepare error
[1]    17556 abort      nextcloud

En activant les logs :

$ nextcloud --logdebug --logfile nextcloud-3.1.1-2-debian-11-crash.log
# (crash)
$ tail nextcloud-3.1.1-2-debian-11-crash.log
2021-08-06 14:14:29:767 [ info nextcloud.sync.database ]:	Updating file record for path: "folder/file.ods" inode: 22941055 modtime: 1628101684 type: 0 etag: "b5e26ace3cfab01e80fbe936d25ecca8" fileId: "57223703oceabea76879" remotePerm: "WDNVR" fileSize: 22358 checksum: "SHA1:8a43b907fb3b42d5f90dd6935027df5037aa5982" e2eMangledName: "" isE2eEncrypted: false
2021-08-06 14:14:29:767 [ debug nextcloud.sync.database.sql ]	[ OCC::SqlQuery::bindValue ]:	SQL bind 1 QVariant(QByteArray, "SHA1")
2021-08-06 14:14:29:767 [ debug nextcloud.sync.database.sql ]	[ OCC::SqlQuery::exec ]:	SQL exec "INSERT OR IGNORE INTO checksumtype (name) VALUES (?1)"
2021-08-06 14:14:29:767 [ debug nextcloud.sync.database.sql ]	[ OCC::SqlQuery::exec ]:	Last exec affected 0 rows.
2021-08-06 14:14:29:767 [ debug nextcloud.sync.database.sql ]	[ OCC::SqlQuery::bindValue ]:	SQL bind 1 QVariant(QByteArray, "SHA1")
2021-08-06 14:14:29:767 [ debug nextcloud.sync.database.sql ]	[ OCC::SqlQuery::exec ]:	SQL exec "SELECT id FROM checksumtype WHERE name=?1"
2021-08-06 14:14:29:767 [ warning nextcloud.sync.database.sql ]:	Sqlite prepare statement error: "unknown function: parent_hash()" in "INSERT OR REPLACE INTO metadata (phash, pathlen, path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, filesize, ignoredChildrenRemote, contentChecksum, contentChecksumTypeId, e2eMangledName, isE2eEncrypted) VALUES (?1 , ?2, ?3 , ?4 , ?5 , ?6 , ?7,  ?8 , ?9 , ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17, ?18);"
2021-08-06 14:14:29:767 [ fatal default ]:	ENFORCE: "allow_failure" in file ./src/common/ownsql.cpp, line 265 with message: SQLITE Prepare error

Le problème est un peu plus clair : unknown function: parent_hash() lors d'une requête SQL.

Solution

Après quelques recherches, ce commentaire propose une solution : supprimer l'index SQL metadata_parent.

Pour ce faire, localiser le fichier de la base de données : se rendre dans le dossier local de synchronisation (généralement $HOME/Nextcloud), il y doit y avoir un fichier du genre .sync_<UID>.db. Ensuite, supprimer l'index :

$ cd ~/Nextcloud
$ sqlite3 .sync_5a4df51e68e1.db "DROP INDEX metadata_parent"

Et voilà !