2

There is already a question "How can I time SQL-queries using psql?" but I am missing answer how to do that from command line. How to run script with (optional) timing from command line – without \timing [on|off] in the script, please?

Hans Ginzel
  • 123
  • 1
  • 6

1 Answers1

6

You could use the shell command time

postgres@db:$ time psql db -c 'SELECT 1'
 ?column?
----------
        1
(1 row)

real 0m0.108s user 0m0.040s sys 0m0.032s

Or, to combine a meta command with an SQL command, you could pipe a string to psql:

postgres@db:~/script$ echo '\timing \\ SELECT 1;' | LANG=C psql
Timing is on.
 ?column?
----------
        1
(1 row)

Time: 0.000 ms

The manual:

The special sequence \\ (two backslashes) marks the end of arguments and continues parsing SQL commands, if any. That way SQL and psql commands can be freely mixed on a line. But in any case, the arguments of a meta-command cannot continue beyond the end of the line.

More options:

Erwin Brandstetter
  • 175,982
  • 27
  • 439
  • 600
  • 3
    The time command would measure whole script not each query. Inspired by the second suggestion: { echo '\timing on;'; cat file.sql } |psql. – Hans Ginzel May 01 '15 at 17:20