
Postgres tips for Rails developers - craigkerstiens
https://www.citusdata.com/blog/2017/04/28/postgres-tips-for-rails/
======
theodorton
Surprised the list doesn't mention PGHero
([https://github.com/ankane/pghero](https://github.com/ankane/pghero)). It's
been really useful at our company to find slow queries and identify missing
indices.

~~~
lm2s
Whoa. This seems very nice. I'm on my phone now and can fully check it, this
works directly with PostgreSQL, right? It doesn't matter if the application
layer is Rails or Django or whatever, correct?

~~~
sudhirj
Correct. Works directly off pg stats. It's one of the first items on the
deployment checklist for every product or service in the company.

~~~
duncanawoods
> It doesn't matter if the application layer is Rails or Django or whatever,
> correct?

>> Correct. Works directly off pg stats

Huh - PgHero is a rails app isn't it?

~~~
MichaelBurge
There are two applications in scope: The application whose database is being
monitored, and the application displaying the dashboard.

------
misterbowfinger
I wonder why some of these tips, like a statement timeout, aren't the default
behavior of Rails. Some things can't be, like pg-bouncer, which makes sense.
But why not have pg_stat_statements running on PG? Or have log_lock_waits in
each statement?

~~~
nateberkopec
The appropriate setting for a statement timeout could really depend on the
application. 5 seconds is probably sane for 90% of applications, but the other
5% may have a legitimate need for longer running statements.

~~~
jhardcastle
But isn't that the idea behind Rails? Opinionated defaults with a config to
change the setting somewhere?

~~~
nateberkopec
Yes, but at some point you can't just go around installing all the possible
extensions/gems/whatever that you think are "good". The default gemfile would
be 300 lines long with "developer happiness" gems such as `oink`, `bullet`,
etc etc etc.

Most of the things that Rails is "opinionated" about are _far_ more arbitrary
than this, like whether the database primary key should be “id”, “postId”,
“posts_id”, or “pid”.

~~~
_jal
> Most of the things that Rails is "opinionated" about are far more arbitrary
> than this

To my eye, at least, it isn't a matter of being arbitrary, but rather not
having an answer.

PK names don't matter to the machine, so long as everything agrees and modulo
illegal values. Humans get massively opinionated, but the machine doesn't
care.

Compare with: How long should a query take to run? No, I'm not going to tell
you what kind of query, or the size of the dataset, or the hardware at the
bottom of the stack, or what the app is actually doing.

It is like asking what specific clothes an arbitrary person should wear.

------
nateberkopec
A feature somewhat similar to `marginalia` is probably going to merged into
Rails very soon:
[https://github.com/rails/rails/pull/26815](https://github.com/rails/rails/pull/26815)

~~~
craigkerstiens
Yes, very excited for this! It should replace much of the need for marginalia,
really nice to see more of these key things needed to get visibility come into
Rails.

~~~
a12b
If that may interest someone and to do some self promotion too :-)

I have built a product (rails app monitoring service) that shows the file:line
for each SQL request: [https://rorvswild.com](https://rorvswild.com)

