allow to \dtS+ pg_toast.*

Started by Justin Pryzbyover 5 years ago8 messageshackers
Jump to latest
#1Justin Pryzby
pryzby@telsasoft.com

This makes toast tables a bit less special and easier to inspect.

postgres=# \dtS+ pg_toast.pg_toast_2619
pg_toast | pg_toast_2619 | toast table | pryzbyj | permanent | heap | 56 kB |

This follows commit from last year:
| eb5472da9 make \d pg_toast.foo show its indices ; and, \d toast show its main table

--
Justin

Attachments:

v1-0001-Allow-to-dt-pg_toast.patchtext/x-diff; charset=us-asciiDownload+6-9
#2Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Justin Pryzby (#1)
Re: allow to \dtS+ pg_toast.*

On Mon, 2020-11-30 at 10:54 -0600, Justin Pryzby wrote:

This makes toast tables a bit less special and easier to inspect.

postgres=# \dtS+ pg_toast.pg_toast_2619
pg_toast | pg_toast_2619 | toast table | pryzbyj | permanent | heap | 56 kB |

This follows commit from last year:
| eb5472da9 make \d pg_toast.foo show its indices ; and, \d toast show its main table

This would indeed be convenient.

The patch passes regression tests.

While playing around with it, I found the following oddity:

regression=# \dtS+ pg_toast.pg_toast_30701
List of relations
Schema | Name | Type | Owner | Persistence | Access Method | Size | Description
----------+----------------+-------------+---------+-------------+---------------+---------+-------------
pg_toast | pg_toast_30701 | toast table | laurenz | permanent | heap | 0 bytes |
(1 row)

regression=# \dtS pg_toast.pg_toast_30701
List of relations
Schema | Name | Type | Owner
----------+----------------+-------------+---------
pg_toast | pg_toast_30701 | toast table | laurenz
(1 row)

regression=# \dt pg_toast.pg_toast_30701
Did not find any relation named "pg_toast.pg_toast_30701".

Now this doesn't seem right. To my understanding, \dtS should do the same as \dt,
except that it should also search in "pg_catalog" if no schema was provided.

Another thing that is missing is tab completion for

regression=# \dtS pg_toast.pg_

This should work just like for \d and \dS.

Both of these effects can also be observed with \di and toast indexes.

Yours,
Laurenz Albe

#3Justin Pryzby
pryzby@telsasoft.com
In reply to: Laurenz Albe (#2)
Re: allow to \dtS+ pg_toast.*

Thanks for looking

On Thu, Dec 17, 2020 at 04:16:52PM +0100, Laurenz Albe wrote:

On Mon, 2020-11-30 at 10:54 -0600, Justin Pryzby wrote:

This makes toast tables a bit less special and easier to inspect.

postgres=# \dtS+ pg_toast.pg_toast_2619
pg_toast | pg_toast_2619 | toast table | pryzbyj | permanent | heap | 56 kB |

This follows commit from last year:
| eb5472da9 make \d pg_toast.foo show its indices ; and, \d toast show its main table

This would indeed be convenient.

While playing around with it, I found the following oddity:

regression=# \dtS pg_toast.pg_toast_30701
pg_toast | pg_toast_30701 | toast table | laurenz

regression=# \dt pg_toast.pg_toast_30701
Did not find any relation named "pg_toast.pg_toast_30701".

Now this doesn't seem right. To my understanding, \dtS should do the same as \dt,
except that it should also search in "pg_catalog" if no schema was provided.

You mean that if pg_toast.* should be shown if a matching "pattern" is given,
even if "S" was not used. I think you're right. The behavior I implemented
was intended to provide a bit of historic compatibility towards hiding toast
tables, but I think it's not needed, since they're not shown anyway unless
someone includes "S", specifies the "pg_toast." schema, or pg_toast is in their
search path. See attached.

Another thing that is missing is tab completion for
regression=# \dtS pg_toast.pg_
This should work just like for \d and \dS.

Tom objected to this in the past, humorously to me:

/messages/by-id/14255.1536781029@sss.pgh.pa.us

Show quoted text

On Wed, Sep 12, 2018 at 03:37:09PM -0400, Tom Lane wrote:

Arthur Zakirov <a.zakirov@postgrespro.ru> writes:

On Sun, Jul 29, 2018 at 07:42:43PM -0500, Justin Pryzby wrote:

Actually..another thought: since toast tables may be VACUUM-ed, should I
introduce Query_for_list_of_tpmt ?

I didn't include this one yet though.

I think it could be done by a separate patch.

I don't actually think that's a good idea. It's more likely to clutter
peoples' completion lists than offer anything they want. Even if someone
actually does want to vacuum a toast table, they are not likely to be
entering its name via tab completion; they're going to have identified
which table they want via some query, and then they'll be doing something
like copy-and-paste out of a query result.

Attachments:

0001-Allow-to-dti-pg_toast.patchtext/x-diff; charset=us-asciiDownload+6-19
#4Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Justin Pryzby (#3)
Re: allow to \dtS+ pg_toast.*

On Fri, 2020-12-18 at 00:58 -0600, Justin Pryzby wrote:

On Thu, Dec 17, 2020 at 04:16:52PM +0100, Laurenz Albe wrote:

On Mon, 2020-11-30 at 10:54 -0600, Justin Pryzby wrote:

This makes toast tables a bit less special and easier to inspect.

postgres=# \dtS+ pg_toast.pg_toast_2619
pg_toast | pg_toast_2619 | toast table | pryzbyj | permanent | heap | 56 kB |

This follows commit from last year:
| eb5472da9 make \d pg_toast.foo show its indices ; and, \d toast show its main table

This would indeed be convenient.

While playing around with it, I found the following oddity:

regression=# \dtS pg_toast.pg_toast_30701
pg_toast | pg_toast_30701 | toast table | laurenz

regression=# \dt pg_toast.pg_toast_30701
Did not find any relation named "pg_toast.pg_toast_30701".

Now this doesn't seem right. To my understanding, \dtS should do the same as \dt,
except that it should also search in "pg_catalog" if no schema was provided.

You mean that if pg_toast.* should be shown if a matching "pattern" is given,
even if "S" was not used. I think you're right. The behavior I implemented
was intended to provide a bit of historic compatibility towards hiding toast
tables, but I think it's not needed, since they're not shown anyway unless
someone includes "S", specifies the "pg_toast." schema, or pg_toast is in their
search path. See attached.

Yes, exactly.

I wonder why the modification in "listPartitionedTables" is necessary.
Surely there cannot be any partitioned toast tables, can there?

Another thing that is missing is tab completion for
regression=# \dtS pg_toast.pg_
This should work just like for \d and \dS.

Tom objected to this in the past, humorously to me:

/messages/by-id/14255.1536781029@sss.pgh.pa.us

That was about VACUUM and ANALYZE, and I certainly see the point
that this is not a frequent enough use case to warrant guiding
people there with tab completion.

But I don't take that as an argument against tab completion in our case.
If I want to know how big the TOAST table of relation 87654 is,
I think it is convenient if I can tab to

\dt+ pg_toast.pg_toast_

If you want to abolish special treatment for TOAST tables in \dt(S),
go all the way.

Yours,
Laurenz Albe

#5Justin Pryzby
pryzby@telsasoft.com
In reply to: Laurenz Albe (#4)
Re: allow to \dtS+ pg_toast.*

On Fri, Dec 18, 2020 at 12:43:07PM +0100, Laurenz Albe wrote:

On Fri, 2020-12-18 at 00:58 -0600, Justin Pryzby wrote:

On Thu, Dec 17, 2020 at 04:16:52PM +0100, Laurenz Albe wrote:

On Mon, 2020-11-30 at 10:54 -0600, Justin Pryzby wrote:

This makes toast tables a bit less special and easier to inspect.

postgres=# \dtS+ pg_toast.pg_toast_2619
pg_toast | pg_toast_2619 | toast table | pryzbyj | permanent | heap | 56 kB |

This follows commit from last year:
| eb5472da9 make \d pg_toast.foo show its indices ; and, \d toast show its main table

This would indeed be convenient.

While playing around with it, I found the following oddity:

regression=# \dtS pg_toast.pg_toast_30701
pg_toast | pg_toast_30701 | toast table | laurenz

regression=# \dt pg_toast.pg_toast_30701
Did not find any relation named "pg_toast.pg_toast_30701".

Now this doesn't seem right. To my understanding, \dtS should do the same as \dt,
except that it should also search in "pg_catalog" if no schema was provided.

You mean that if pg_toast.* should be shown if a matching "pattern" is given,
even if "S" was not used. I think you're right. The behavior I implemented
was intended to provide a bit of historic compatibility towards hiding toast
tables, but I think it's not needed, since they're not shown anyway unless
someone includes "S", specifies the "pg_toast." schema, or pg_toast is in their
search path. See attached.

Yes, exactly.

I wonder why the modification in "listPartitionedTables" is necessary.
Surely there cannot be any partitioned toast tables, can there?

The comment should be removed for consistency.
And I changed the code for consistency with listTables (from which I assume
listPartitionedTables was derived - I was involved in the last stages of that
patch). It doesn't need to exclude pg_catalog or information_schema, either,
but it's kept the same for consistency. That part could also be removed.

Another thing that is missing is tab completion for
regression=# \dtS pg_toast.pg_
This should work just like for \d and \dS.

..

If I want to know how big the TOAST table of relation 87654 is,
I think it is convenient if I can tab to

\dt+ pg_toast.pg_toast_

I agree that it's nice to complete the schema name, but I'm still not convinced
this part should be included.

The way to include pg_toast.pg_toast is if toast relations are included, which
is exactly what Tom pointed out is usually unhelpful. If you include toast
relations, tab completion might give "pg_toast.pg_toast_14..." when you wanted
to paste "145678" - you'd need to remove the common suffix that it found.

I considered whether "toast table" should be capitalized (as it is for "\d")
but I think it should stay lowercase.

--
Justin

Attachments:

0001-Allow-to-dti-pg_toast.patchtext/x-diff; charset=us-asciiDownload+18-20
#6Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Justin Pryzby (#5)
Re: allow to \dtS+ pg_toast.*

On Fri, 2020-12-18 at 11:33 -0600, Justin Pryzby wrote:

This makes toast tables a bit less special and easier to inspect.

I wonder why the modification in "listPartitionedTables" is necessary.
Surely there cannot be any partitioned toast tables, can there?

The comment should be removed for consistency.
And I changed the code for consistency with listTables (from which I assume
listPartitionedTables was derived - I was involved in the last stages of that
patch). It doesn't need to exclude pg_catalog or information_schema, either,
but it's kept the same for consistency. That part could also be removed.

I don't think that consistency with "listTables" is particularly useful here,
but I think this is somewhat academic.

I'll leave that for the committer to decide.

Another thing that is missing is tab completion for
regression=# \dtS pg_toast.pg_
This should work just like for \d and \dS.

I agree that it's nice to complete the schema name, but I'm still not convinced
this part should be included.

The way to include pg_toast.pg_toast is if toast relations are included, which
is exactly what Tom pointed out is usually unhelpful. If you include toast
relations, tab completion might give "pg_toast.pg_toast_14..." when you wanted
to paste "145678" - you'd need to remove the common suffix that it found.

Again a judgement call. I am happy with the way the latest patch does it.

I considered whether "toast table" should be capitalized (as it is for "\d")
but I think it should stay lowercase.

Then you should also change the way \d does it (upper case).
I think we should be consistent.

I'd use TOAST for both to create no unnecessary change in \d output.

Anyway, I think that this is ready for committer and will mark it as such.

Yours,
Laurenz Albe

#7Tom Lane
tgl@sss.pgh.pa.us
In reply to: Laurenz Albe (#6)
Re: allow to \dtS+ pg_toast.*

Laurenz Albe <laurenz.albe@cybertec.at> writes:

On Fri, 2020-12-18 at 11:33 -0600, Justin Pryzby wrote:

This makes toast tables a bit less special and easier to inspect.

Pushed, except for

Another thing that is missing is tab completion for
regression=# \dtS pg_toast.pg_
This should work just like for \d and \dS.

I agree that it's nice to complete the schema name, but I'm still not convinced
this part should be included.

Again a judgement call. I am happy with the way the latest patch does it.

I remain pretty much against including toast tables in tab completion,
so I left out that part.

I considered whether "toast table" should be capitalized (as it is for "\d")
but I think it should stay lowercase.

Then you should also change the way \d does it (upper case).
I think we should be consistent.

I think capitalized TOAST is correct, because it's an acronym.
I also agree that consistency with what \d shows is important,
and I have no desire to change \d's longstanding output.

regards, tom lane

#8Justin Pryzby
pryzby@telsasoft.com
In reply to: Tom Lane (#7)
Re: allow to \dtS+ pg_toast.*

On Tue, Jan 05, 2021 at 06:46:01PM -0500, Tom Lane wrote:

Laurenz Albe <laurenz.albe@cybertec.at> writes:

On Fri, 2020-12-18 at 11:33 -0600, Justin Pryzby wrote:

This makes toast tables a bit less special and easier to inspect.

Pushed, except for

Thank you

--
Justin