I ran a pg data warehouse in the 8.x and 9.x days with about 20TB of data and it performed great.
I ran a pg data warehouse in the 8.x and 9.x days with about 20TB of data and it performed great.
What we personally do in practice is put everything into a single time-series table with 11 columns. [1]
* partitioning your fact/aggregate tables (which was mentioned)
* rolling up old data reducing granularity as data ages can help with record count and overall db size
* PG triggers and stored procedures can be used to manage slowly changing dimensions
* the hstore and json column types are super useful for implementing quazi-nosql storage along side traditional relational storage
* window functions and CTEs (in 12) are great for writing analytical style queries
* Implementing incremental loads with a staging/buffer table and possibly with plpgsql can really make connecting it all easier
Not saying I didn't enjoy the article. It always makes me happy to see people realizing how suited PG can be to analytical workflows especially for small to medium workloads which represents most of what people want to do.
Typically only the more recent data was analyzed.
We retained all source data sou that reprocessing could happen when adding facts or dimensions.
Analysis, scheduled or ad hoc, only ever happened against the data cubes. Their partial aggregate nature along with partitioning was part of how the performance was so good.