Zoteroで別アカウントとSyncする

Zoteroのアカウントを変更する話

Zoteroはライブラリとオンラインのアカウントが紐ついているので、別アカウントと同期することはできない。 今回、紐付けを削除して、別アカウントと同期できたので、記録に残す。

Zoteroのアカウントを削除してしまった

ローカルとZotero.orgをSyncしていたのだが、ローカルのライブラリを大幅に変更した。 Syncして、オンラインからデータがダウンロードされると嫌だなと思い、Zotero.orgのアカウントを削除した。

本来、ZoteroのSyncメニュー(同期)には「リセット」というオプションがあり、そのオプションを使えば、オンライン上のライブラリを強制的にローカルのデータで上書きできる。 それを知ったのは、オンラインのアカウントを削除してからだった。

さて、オンラインのアカウントを新規に作り直して、ローカルのデータをアップロードしようとしたら、これができない。 Zoteroの仕様で、ローカルにあるライブラリとオンラインのアカウントは1対1で紐ついている。 そして一度これを作ってしまうと、もう変更はできない。

もう存在しないアカウントに紐ついたライブラリは、二度とオンラインと同期できなくなってしまった。 さすがにこれは困るので、いろいろと試行錯誤をしてみた。

新しいライブラリでやり直しも無理

まずは、オンラインと紐付いていないライブラリを作成して、旧ライブラリからデータをインポートすることを試した。

データのエクスポート・インポートを行うと、登録日が削除されてしまうのが問題だ。正直、「いつごろのしごとに関連して追加した論文」という記憶で論文を検索することもあるので、登録日は削除してほしくない。

でもまあ、とりあえずやれるかどうかは試してみたい。 旧ライブラリからエクスポートしたものをインポートしようとしてみた。 インポートはできたが、せっかくフォルダ分けしたライブラリのフォルダが全部解除されてしまっている!

これはだめだ!と思い、次の手段に移行した。

※ 後日よく見たら、僕がインポートしていたのはbibファイルで今エクスポートしたものではなかった。 エクスポートしたフォルダの中に、さらに「マイライブラリ」というフォルダが作られていて、そのなかにZotero形式(RDF)でエクスポートしたライブラリがあった。 こちらをインポートしたら、フォルダ構造もちゃんと再現された。

だが、残念ながら、僕がエクスポートしたのは、PDFをファイルのないもの。 この辺、よくわからない。

Sqliteを直接いじる

次の手段と言っても、もはや、普通の方法ではできない!と覚悟した。

オンラインとの紐付きはなにか設定ファイルにあるのかな?と思い、Zoteroのライブラリを見てみた。そうすると、Zoteroのデータベースはsqlite形式で保管されている事がわかった。

sqliteを閲覧・編集できるツールを持ってきて、中を見てみた。

なるほど、過去と連携した形跡がsettingsとかに確かに残っている。

削除するのは、usersテーブルとsettingsテーブルにあるオンラインのアカウント名とID番号だ。 該当するレコードを削除すると、過去にSyncしたオンライン上のアカウントを忘れてくれる。

さて、これでSyncすればいいのかな?と思うと、「_libraryStorageVersion cannot decreased」というエラーが出てしまう。 どうやら、こちらのライブラリのバージョンとオンラインのバージョンの不整合のようだ。

これを修正するのは、librariesテーブルだ。 versionとstorageversionがあるが、versionの方を古いように修正する。

以上でZoteroを再起動して、同期の設定をする。 僕は同期の設定をした直後に「リセット」するようにした。

ここまでやると、ライブラリのエクスポート・インポートを経ずに新しいアカウントとの同期が実現した。

作業上の注意

データベースを試行錯誤しながらいじる過程で不要なレコードを削除してしまうことが何回かあった。 データベースを不用意に変更すると、Zoteroが起動しなくなってしまう。

そのたびにライブラリをバックアップのものに戻してトライアンドエラーを繰り返した。

Zoteroのライブラリはフォルダをそのままコピーすればバックアップしたことになる。 これを毎回コピーし直してもいい。

データベースだけの問題であれば、zotero.sqliteファイルをコピーしておく。 Zoteroの挙動がおかしくなったら、このファイルを復元してトライする。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。