top | item 16275786

Postgres Hidden Gems

79 points| thibaut_barrere | 8 years ago |craigkerstiens.com

10 comments

order
[+] Klathmon|8 years ago|reply
I'm going to echo the comment about aggregate functions.

I don't know how "hidden" they are, but they are one hell of a gem!

At this point our one application has more SQL code in it than application code. The postgresql json* aggregate functions make querying and formatting data easy enough that it can be done directly in the database and the result basically piped to the output without any need to reformat it.

I'll also add CTEs. They might also not be very "hidden" but they are fantastic once you get used to using them.

[+] sk5t|8 years ago|reply
CTEs are very nice, although their performance characteristics push me over to lateral joins and subqueries by default.
[+] dizzystar|8 years ago|reply
Definitely a huge fan of window functions. I once read a comment that there are two eras of SQL: Before Windowing and After Windowing, and I have to agree with that.

Not mentioned, but pg_x and information schema is a probably my favorite somewhat-hidden feature. It really let's you dive into analysis and can help get out of little binds very quickly. It's not something I use every day, but I'm always glad it's there.

[+] Klathmon|8 years ago|reply
My favorite usage of the information schema stuff was with unit testing.

We have a VERY small ORM-ish library called PG-Promise that we use in a node.js application. It's basically just a nice interface to the database, but it does include some small functionality where you can define the database layout in javascript and it will auto-convert most of your data from JSON to the correct columns and in many cases types.

We wrote tests that use information schema to compare those objects and ensure that there aren't any missing or extra on either side, and to make sure that the javascript types match the database types.

[+] MightySCollins|8 years ago|reply
Disappointed that there is not a Postgres hidden game which is what I thought when reading the title.
[+] qatanah|8 years ago|reply
Something to add on the list base on my experience.

FILLFACTOR - For UPDATE heavy tables.

Increase max_wal_size - For write heavy database.

[+] amerine|8 years ago|reply
I love Craig’s posts. I wish we had more interactions @ Heroku! ️
[+] craigkerstiens|8 years ago|reply
Aww, thanks. Always happy to swing by the office and catch up when you're in town.