I had two Arch Linux machines in short time where pacmans database was deleted by accident (it resides under /var/lib/pacman/). Afterwards pacman doesn’t know about any installed packages, which I realized when no updates where available ;-) To verify this situation you can use pacman -Qe to list all installed packages.

If you lost the database, of course your system continues working but it’s hard to recover the state of the database. If you don’t have a recent backup you can check for installed and/or upgraded packages in /var/log/pacman.log

# search for ALPM messages containing installed or upgreaded and write each package name to probably_installed_pkgs.txt
grep ALPM /var/log/pacman.log | awk '/(installed|upgraded)/ {print $4}' | sort | uniq > probably_installed_pkgs.txt

# install each of these packages
for i in (cat probably_installed_pkgs.txt)
    echo "$i"
    sudo pacman --noconfirm -S --needed --overwrite "*" $i
    echo "----"

--noconfirm sets pacman to non-interactive
--needed prevents reinstalls, in case the pkg was already installed before as dependency
--overwrite tells pacman to ignore already existing files

This fixed most of misery. But I also had a bunch of packages installed which came from the AUR repos. To install them I wrote this second loop:

for i in (cat probably_installed_pkgs.txt)
  # check if pacman is able to find the package in the standard repos
  # otherwise install it with yay from the AUR
  pacman -Ss $i || yay --noconfirm --needed -S --overwrite '*' $i

Of course you can combine them into one.

In the end I save the result in a file.

# save all installed pkg names
yay -Qe > installed_pkgs.txt
# count the installed pkgs
yay -Qe | wc -l >> installed_pkgs.txt

This could be done via cronjob or a pacman post hook