- generate_series(): While not the best to make _realistic_ test data for proper load testing, at least it's easy to make a lot of data. If you don't have a few million rows in your tables when you're developing, you probably don't know how things behave, because a full table/seq scan will be fast anyway - and you'll not spot the missing indexes (on e.g. reverse foreign keys, I see missing often enough)
- `EXPLAIN` and `EXPLAIN ANALYZE`. Don't save minutes of looking at your query plans during development by spending hours fixing performance problems in production. EXPLAIN all the things.
A significant percentage of production issues I've seen (and caused) are easily mitigated by those two.
By learning how to read and understand execution plans and how and why they change over time, you'll learn a lot more about databases too.
(CTEs/WITH-expressions are life changing too)