postgresqlpsqlputtypager

PostgreSQL: How to scroll up in long output


Say I get a large query back. Postgres gives me the --More-- indicator. Pressing <space> moves down a page. Pressing <enter> moves down a line. Is there a way to scroll back up? Is it possible to pipe the output to something like less?

I'm accessing PostgreSQL 9.5 on CentOS7 through PuTTY.

For example:

pundb=# \x on
pundb=# select * from pg_roles;

-[ RECORD 1 ]--+-------------
rolname        | dinner
rolsuper       | t
rolinherit     | t
rolcreaterole  | t
rolcreatedb    | t
rolcanlogin    | t
rolreplication | t
rolconnlimit   | -1
rolpassword    | ********
rolvaliduntil  |
rolbypassrls   | t
rolconfig      |
oid            | 10
-[ RECORD 2 ]--+-------------
rolname        | sushi
rolsuper       | f
rolinherit     | t
rolcreaterole  | f
rolcreatedb    | f
rolcanlogin    | t
rolreplication | f
rolconnlimit   | -1
rolpassword    | ********
rolvaliduntil  |
rolbypassrls   | f
rolconfig      |
oid            | 16384
-[ RECORD 3 ]--+-------------
rolname        | drum
rolsuper       | f
rolinherit     | t
rolcreaterole  | f
rolcreatedb    | f
--More--

EDIT: I know that h takes me to the help. It says

b or ctrl-B Skip backwards k screenfuls of text [1]

but this does not work. Maybe because I'm in PuTTY?


Solution

  • You're probably using a $PAGER that doesn't support scrolling upwards. E.g. more.

    Try executing postgresql client using a different PAGER variable:

    PAGER=less psql [...]
    

    Or:

    export PAGER=less
    psql [...]
    

    Another viable option is most which some people like better than less, but it's not quite as ubiquitous as less; you may have to install it.

    If you want to make the change permanent, insert the above export line into your ~/.bash_profile. Then, of course, to apply to your shells, you will need to log out and log in again.

    Keep in mind that you can also add arguments to less inside $PAGER. I like the following options for less(1):

    # ~/.bash_profile
    # -R: Handle colors correctly
    # -S: Chop long lines (scroll left/right using arrow keys or h/l)
    export PAGER='less -RS'
    

    Note: Updating this environment variable globally will affect many things that use the $PAGER environment variable, but hey, it'll only enhance the experience right?