In the special case where the releases of multiple VNs are requested,
and those VNs have releases in common, dbReleaseGet() would return those
releases multiple times. Using a JOIN in order to filter rows isn't safe
if the join condition isn't unique - so use an "id IN(SELECT ..)" filter
instead.
(I found this while editing c15068 and noticing that some releases were
listed twice in the edit form. Editing that entry without manually
removing those duplicates would trigger an internal server error due to
duplicate relations)

Been wanting to do this for a long time - using an integer index into an
array that changes once in a while is way too fragile. Doubly so when
said indices are also used in filters and URLs that can't be updated
every time a new resolution is added.

If you don't really care about the data in your Docker's Postgres DB,
then you can just update with:
docker volume rm vndb-data
docker volume create --name vndb-data
docker build --pull --no-cache -t vndb .
If you do want to keep your data, the process is roughly as follows:
- Do a pg_dumpall from your current docker image to save the data.
- Run the above commands to upgrade
- Import the database in the new docker image
(cherry picked from commit c278eec720)

This touches a bunch of things:
- Adds a new first-class database entry type
- Removes the d+.+.+ BBCode link syntax, adds a new d+#+ and d+#+.+
link syntax (references have been updated where possible)
- Adds a new dependency on Text::MultiMarkdown