Created from the CSV obtained via the Lichess Open Database. All the product of either search and replace — mostly with regular expressions — or of simply opening the file in ChessBase, which then provides the proper tags and converts the movelist to standard algebraic notation.
CAVEAT: This may be a flawed DB. It works in ChessBase, but it mentions on that linked Lichess page that the puzzles actually start on the second move. I haven’t messed around with it enough, but it’s possible that every single puzzle is played from the wrong side.
3,307,409 puzzles • 896 MB PGN • 92.5 MB 7z