Part of the psql meta-command reference. See also: meta-commands-core.md, meta-commands-inspection.md
# psql Meta-Commands — Output Formatting & Pipeline Mode
## Table of Contents
- [Output Formatting](#output-formatting)
- [Pipeline Mode](#pipeline-mode)
- [Session Management](#session-management)
---
## Output Formatting
### `\pset [ option [ value ] ]`
Sets options affecting query result table output. Without arguments, displays current settings.
| Option | Values | Description |
|--------|--------|-------------|
| `border` | 0-2 (3 for latex) | Border/line style. Higher = more lines. |
| `columns` | integer | Target width for wrapped format. 0 = use `COLUMNS` env or screen width. Non-zero also wraps output when sent to file or pipe (normally file/pipe output is unwrapped). |
| `csv_fieldsep` | character | CSV field separator (default: comma) |
| `expanded` (or `x`) | `on`, `off`, `auto` | Vertical display. `auto` uses expanded when wider than screen. Note: `auto` is only effective in `aligned` and `wrapped` formats. |
| `fieldsep` | string | Field separator for unaligned output (default: `\|`) |
| `fieldsep_zero` | — | Set field separator to NUL byte |
| `footer` | `on`, `off` | Toggle row count footer display |
| `format` | `aligned`, `asciidoc`, `csv`, `html`, `latex`, `latex-longtable`, `troff-ms`, `unaligned`, `wrapped` | Output format. See format descriptions below. |
| `linestyle` | `ascii`, `old-ascii`, `unicode` | Border character style. `ascii` uses `+`, `-`, `|` characters. `old-ascii` uses `:` and `;` for borders. `unicode` uses Unicode box-drawing characters. |
| `null` | string | Display string for NULL values (default: empty) |
| `numericlocale` | `on`, `off` | Locale-specific number formatting |
| `pager` | `on`, `off`, `always` | Pager control. Uses `PSQL_PAGER` or `PAGER` env. For `\watch` output, `PSQL_WATCH_PAGER` takes precedence over both. |
| `pager_min_lines` | integer | Minimum lines before pager activates (default: 0) |
| `recordsep` | string | Record separator for unaligned mode (default: newline) |
| `recordsep_zero` | — | Set record separator to NUL byte |
| `tableattr` (or `T`) | string | HTML: table tag attributes (e.g., `border=1`). latex-longtable: whitespace-separated proportional column widths (e.g., `'0.2 0.2 0.6'`). |
| `title` (or `C`) | string | Table title. Unset with no value. |
| `tuples_only` (or `t`) | `on`, `off` | Show only data, no headers/footers |
| `unicode_border_linestyle` | `single`, `double` | Unicode border drawing |
| `unicode_column_linestyle` | `single`, `double` | Unicode column drawing |
| `unicode_header_linestyle` | `single`, `double` | Unicode header drawing |
| `xheader_width` | `full`, `column`, `page`, or integer | Max width of expanded output header |
### Format Descriptions
| Format | Description |
|--------|-------------|
| `aligned` | Standard human-readable table with column alignment (default). |
| `wrapped` | Like `aligned` but long values wrap to fit column width. Headers with underscores are not repeated on continuation rows. |
| `unaligned` | All columns on one line, separated by `fieldsep`. Useful for script output. |
| `csv` | RFC 4180 compliant CSV output. Uses `csv_fieldsep` (default: comma). Safe for import into spreadsheets and other tools. |
| `html` | HTML `
` markup. |
| `asciidoc` | AsciiDoc table format for documentation. |
| `latex` | LaTeX tabular format. |
| `latex-longtable` | LaTeX longtable format for multi-page tables. Supports proportional column widths via `\pset tableattr` (e.g., `'0.2 0.2 0.6'`). |
| `troff-ms` | troff ms macros table format. |
### Formatting shortcuts
| Shortcut | Equivalent |
|----------|-----------|
| `\a` | `\pset format unaligned` (toggle) |
| `\C [title]` | `\pset title` |
| `\f [string]` | `\pset fieldsep` |
| `\H` | `\pset format html` (toggle) |
| `\t` | `\pset tuples_only` (toggle) |
| `\T table_options` | `\pset tableattr` |
| `\x [on\|off\|auto]` | `\pset expanded` |
---
## Pipeline Mode
Pipeline mode batches SQL statements into fewer network round trips for better performance. Available in PostgreSQL 14+.
### Pipeline commands
| Command | Description |
|---------|-------------|
| `\startpipeline` | Begin a pipeline block |
| `\endpipeline` | End a pipeline block and process remaining results |
| `\sendpipeline` | Append current query buffer to pipeline without waiting for results |
| `\syncpipeline` | Send a sync message without ending the pipeline |
| `\flushrequest` | Request server flush without sync |
| `\flush` | Manually push unsent data to server |
| `\getresults [N]` | Read pending results (N=0 or omitted = all) |
### Pipeline rules
- All queries in pipeline mode use the extended query protocol
- Queries are appended with semicolons or `\sendpipeline`
- Allowed meta-commands: `\bind`, `\bind_named`, `\parse`, `\close_prepared`
- NOT allowed: `\g`, `\gx`, `\gdesc` (and other result-consuming commands)
- `COPY` is not supported in pipeline mode
- A `%P` prompt variable is available to show pipeline status (`on`, `off`, or `abort`)
### Example
```sql
\startpipeline
SELECT * FROM pg_class;
SELECT 1 \bind \sendpipeline
\flushrequest
\getresults
\endpipeline
```
---
## Session Management
### `\e` / `\edit [ filename ] [ line_number ]`
Opens the query buffer (or a file) in the external editor. On save, the buffer is re-parsed. Complete queries are immediately executed. The cursor is positioned on the specified line number. See `$EDITOR` / `$VISUAL` for editor configuration.
### `\ef [ function_description [ line_number ] ]`
Edits a function or procedure definition as a `CREATE OR REPLACE FUNCTION/PROCEDURE` command. Specify function by name or name and argument types. Without arguments, shows a blank template. Line number positions within the function body.
Unlike most meta-commands, the entire line is the argument — no variable interpolation.
### `\ev [ view_name [ line_number ] ]`
Edits a view definition as a `CREATE OR REPLACE VIEW` command. Without arguments, shows a blank template.
### `\cd [ directory ]`
Changes the current working directory. Without an argument, changes to the home directory.
```sql
\cd /tmp
\! pwd -- /tmp
\cd -- back to home directory
```
### `\r` / `\reset`
Clears the query buffer.
### `\s [ filename ]`
Prints command history to file or stdout. Requires Readline support.
### `\timing [ on | off ]`
Toggles (or explicitly sets) display of query execution time. Shown in milliseconds; intervals > 1s also show minutes:seconds, hours, days as needed.
### `\errverbose`
Repeats the most recent server error message at maximum verbosity (as if `VERBOSITY=verbose` and `SHOW_CONTEXT=always`).
### `\restrict restrict_key` / `\unrestrict restrict_key`
Enter/exit restricted mode where only `\unrestrict` is allowed. Key must be alphanumeric. Primarily used by `pg_dump`/`pg_restore`.