VALUES provides a way to generate a
"constant table" that can be used in a
query without having to actually create and populate a table
on-disk. The syntax is

VALUES ( expression [, ...] ) [, ...]

Each parenthesized list of expressions generates a row in the
table. The lists must all have the same number of elements (i.e.,
the number of columns in the table), and corresponding entries in
each list must have compatible data types. The actual data type
assigned to each column of the result is determined using the same
rules as for UNION (see Section 10.5).

As an example:

VALUES (1, 'one'), (2, 'two'), (3, 'three');

will return a table of two columns and three rows. It's
effectively equivalent to:

By default, PostgreSQL assigns
the names column1, column2, etc. to the columns of a VALUES table. The column names are not specified by
the SQL standard and different database systems do it differently,
so it's usually better to override the default names with a table
alias list.

Syntactically, VALUES followed by
expression lists is treated as equivalent to:

SELECT select_list FROM table_expression

and can appear anywhere a SELECT can.
For example, you can use it as part of a UNION, or attach a sort_specification (ORDER
BY, LIMIT, and/or OFFSET) to it. VALUES is
most commonly used as the data source in an INSERT command, and next most commonly as a
subquery.