On 2021-Dec-20, Tom Lane wrote:
> -[ RECORD 1
]-------+-----------------------------------------------------------------------------------------------------------
> Schema | pg_catalog
> Name | pg_copy_logical_replication_slot
> Result data type | record
> Argument data types | src_slot_name name, dst_slot_name name, OUT slot_name name, OUT lsn pg_lsn
> The OP wants to fix that by inserting newlines in the "Argument data
> types" column, which'd help, but it seems to me to be mostly a kluge.
> That's prejudging a lot about how the output will be displayed.
> A more SQL-ish way to do things would be to turn the argument items
> into a set of rows. I don't quite see how to make that work here,
> but maybe I'm just undercaffeinated as yet.
Maybe one way to improve on this is to have the server inject optional
line break markers (perhaps U+FEFF) that the client chooses whether or
not to convert into a physical line break, based on line length. So in
\df we would use a query that emits such a marker after every comma and
then psql measures line width and crams as many items in each line as
will fit. In the above example you would still have a single line for
arguments, because your terminal seems wide enough, but if you use a
smaller terminal then it'd be broken across several.
psql controls what happens because it owns the \df query anyway. It
could be something simple like
pg_catalog.add_psql_linebreaks(pg_catalog.pg_get_function_arguments(p.oid))
if we don't want to intrude into pg_get_function_arguments itself.
--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
"Always assume the user will do much worse than the stupidest thing
you can imagine." (Julien PUYDT)