PostgreSQL as the default store
Date Published
One database you understand beats a set you do not.
Relational data is most business data
Orders, accounts, permissions, and history have relationships. PostgreSQL is built for that.
Constraints are features
Foreign keys and unique indexes catch bugs cheaper than application code. Use them.
JSON is available. Use it sparingly.
A jsonb column is useful for optional payloads. It is a poor place for data you will filter and join every day.
Transactions keep the story true
Money, inventory, and status changes should commit together. That is harder to fake across three stores.
Add Redis or search when the access pattern is different
Cache, rate limits, and ephemeral sessions do not belong in the primary tables. Keep PostgreSQL as the source of truth.