Hi, As discussed on guix-devel at https://lists.gnu.org/archive/html/guix-devel/2020-01/msg00310.html , I am working on an sqlite cache to improve guix search performance. I have attached a highly incomplete WIP patch. The patch attempts to reimplement the package-cache-file hook in guix/channels.scm using a sqlite database. To this end, it rewrites most of the generate-package-cache and cache-lookup functions in gnu/packages.scm. I am yet to hook this up to guix search. At the moment, I am having some difficulty populating the sqlite database. generate-package-cache populates the database correctly when invoked from a normal guile REPL using geiser, but fails to do so when run by the guix daemon during guix pull. I ran guix pull using $ ./pre-inst-env guix pull --url=$PWD --branch=search -p /tmp/test where search is the branch I am working on. Running $ ls /tmp/test/lib/guix -lh shows total 2.1M -r--r--r-- 2 root root 2.1M ஜன. 1 1970 package-cache.sqlite -r--r--r-- 2 root root 26K ஜன. 1 1970 package-cache.sqlite-journal On examining package-cache.sqlite, I find that no records have been written. And, there is a lingering journal file that shouldn't be there. For some reason, populating the sqlite database does not work with guix pull. sqlite probably crashes and leaves the journal file. If I try to populate the database with each package record being inserted in its own transaction, at least some of the insertions work. But the journal file still lingers. My unverified guess is that everything except the last transaction was successful. Any ideas what's going on? Also, inserting each package in its own transaction is ridiculously slow and so that is out of the question. See https://www.sqlite.org/faq.html#q19