Postgres JSON field for many to many relationships
would it be better to use Postgres' JSON functionality to store my data something like this:


No.


  Are there any downsides to an approach like this?


GIN / GiST indexes on jsonb are bigger and slower than b-tree indexes. Additionally, whenever you update a field it must be rewritten, you can't just insert an extra element inside the json document in the row.


  My concern is that since every move is creating a new entry into the junction table -- and there are potentially hundreds of stages a lead can go through -- it may lead to hundreds of thousands of rows for very few leads and that could probably impact the lookup time when I'm trying to fetch a specific set.


This is what RDBMSes are good at.

Use the conventional relational modelling for this unless you have a really good reason not to.