238

I would like to benchmark some SQL-queries agains my PostgreSQL database. Is there any way I can time SQL-queries using psql?

321

Just turn on timing by entering:

\timing

  • 1
    From out bash, the "-c" option of psql does not allow this setting. You can do this with something like: psql --o /dev/null <<EOF \timing select 1 EOF – 3manuek Jul 14 '16 at 17:38
  • 6
    Or do psql -c '\timing' -c 'select 1' – cdmckay Aug 24 '17 at 2:11
72

Timing can be turned on with \timing at the psql prompt (as Caleb already said).

If you are on 8.4 or above, you can add an optional on/off argument to \timing, which can be helpful if you want to be able to set timing on in .psqlrc - you can then set \timing on explicitly in a script where plain \timing would otherwise toggle it off

12

The time that \timing returns also includes the network latency, if you're connecting to a remote server.

When you don't want that and don't need the query output too, better use EXPLAIN ANALYZE, which outputs the query plan with the planner estimates plus the actual execution times.

for example, EXPLAIN ANALYZE SELECT foo from bar ;

  • 1
    ... the only issue being that you don't receive the normal query output. – dezso Nov 17 '17 at 4:56
  • 2
    Using explain analyze yields times that are approximately double what I see when using \timing, which is the opposite of what I would expect based on the comments here regarding network latency. I suspect that there is overhead in the normal execution of analyze that adds to the query time. Based on the docs, I think that EXPLAIN (ANALYZE, TIMING OFF) SELECT foo FROM bar will give you more useful timing information. See postgresql.org/docs/9.6/static/sql-explain.html for details. – larsks Dec 5 '17 at 14:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.