Thread

Commits

  1. Improve psql's \d output for partitioned indexes.

  2. Improve psql's \d output for TOAST tables.

  1. make \d pg_toast.foo show its indices

    Justin Pryzby <pryzby@telsasoft.com> — 2019-04-22T15:49:02Z

    It's deliberate that \dt doesn't show toast tables.
    \d shows them, but doesn't show their indices.
    
    It seems to me that their indices should be shown, without having to think and
    know to query pg_index.
    
    postgres=# \d pg_toast.pg_toast_2600
    TOAST table "pg_toast.pg_toast_2600"
       Column   |  Type   
    ------------+---------
     chunk_id   | oid
     chunk_seq  | integer
     chunk_data | bytea
    Indexes:
        "pg_toast_2600_index" PRIMARY KEY, btree (chunk_id, chunk_seq)
    
    Justin
    
  2. Re: make \d pg_toast.foo show its indices

    Rafia Sabih <rafia.pghackers@gmail.com> — 2019-05-03T12:55:47Z

    On Mon, 22 Apr 2019 at 17:49, Justin Pryzby <pryzby@telsasoft.com> wrote:
    >
    > It's deliberate that \dt doesn't show toast tables.
    > \d shows them, but doesn't show their indices.
    >
    > It seems to me that their indices should be shown, without having to think and
    > know to query pg_index.
    >
    > postgres=# \d pg_toast.pg_toast_2600
    > TOAST table "pg_toast.pg_toast_2600"
    >    Column   |  Type
    > ------------+---------
    >  chunk_id   | oid
    >  chunk_seq  | integer
    >  chunk_data | bytea
    > Indexes:
    >     "pg_toast_2600_index" PRIMARY KEY, btree (chunk_id, chunk_seq)
    >
    +1.
    
    
    -- 
    Regards,
    Rafia Sabih
    
    
    
    
  3. Re: make \d pg_toast.foo show its indices

    Justin Pryzby <pryzby@telsasoft.com> — 2019-05-03T14:27:22Z

    On Fri, May 03, 2019 at 02:55:47PM +0200, Rafia Sabih wrote:
    > On Mon, 22 Apr 2019 at 17:49, Justin Pryzby <pryzby@telsasoft.com> wrote:
    > >
    > > It's deliberate that \dt doesn't show toast tables.
    > > \d shows them, but doesn't show their indices.
    > >
    > > It seems to me that their indices should be shown, without having to think and
    > > know to query pg_index.
    > >
    > > postgres=# \d pg_toast.pg_toast_2600
    > > TOAST table "pg_toast.pg_toast_2600"
    > >    Column   |  Type
    > > ------------+---------
    > >  chunk_id   | oid
    > >  chunk_seq  | integer
    > >  chunk_data | bytea
    > > Indexes:
    > >     "pg_toast_2600_index" PRIMARY KEY, btree (chunk_id, chunk_seq)
    >
    > +1.
    
    Thanks - what about also showing the associated non-toast table ?
    
    postgres=# \d pg_toast.pg_toast_2620
    TOAST table "pg_toast.pg_toast_2620"
       Column   |  Type
    ------------+---------
     chunk_id   | oid
     chunk_seq  | integer
     chunk_data | bytea
    FOR TABLE: "pg_catalog.pg_trigger"
    Indexes:
        "pg_toast_2620_index" PRIMARY KEY, btree (chunk_id, chunk_seq)
    
    That could be displayed differently, perhaps in the header, but I think this is
    more consistent with other display.
    
    Justin
    
  4. Re: make \d pg_toast.foo show its indices

    Rafia Sabih <rafia.pghackers@gmail.com> — 2019-05-06T07:13:52Z

    On Fri, 3 May 2019 at 16:27, Justin Pryzby <pryzby@telsasoft.com> wrote:
    >
    > On Fri, May 03, 2019 at 02:55:47PM +0200, Rafia Sabih wrote:
    > > On Mon, 22 Apr 2019 at 17:49, Justin Pryzby <pryzby@telsasoft.com> wrote:
    > > >
    > > > It's deliberate that \dt doesn't show toast tables.
    > > > \d shows them, but doesn't show their indices.
    > > >
    > > > It seems to me that their indices should be shown, without having to think and
    > > > know to query pg_index.
    > > >
    > > > postgres=# \d pg_toast.pg_toast_2600
    > > > TOAST table "pg_toast.pg_toast_2600"
    > > >    Column   |  Type
    > > > ------------+---------
    > > >  chunk_id   | oid
    > > >  chunk_seq  | integer
    > > >  chunk_data | bytea
    > > > Indexes:
    > > >     "pg_toast_2600_index" PRIMARY KEY, btree (chunk_id, chunk_seq)
    > >
    > > +1.
    >
    > Thanks - what about also showing the associated non-toast table ?
    >
    IMHO, what makes more sense is to show the name of associated toast
    table in the \dt+ of the normal table.
    
    
    -- 
    Regards,
    Rafia Sabih
    
    
    
    
  5. Re: make \d pg_toast.foo show its indices

    Tom Lane <tgl@sss.pgh.pa.us> — 2019-05-06T15:58:18Z

    Rafia Sabih <rafia.pghackers@gmail.com> writes:
    > On Fri, 3 May 2019 at 16:27, Justin Pryzby <pryzby@telsasoft.com> wrote:
    >> Thanks - what about also showing the associated non-toast table ?
    
    > IMHO, what makes more sense is to show the name of associated toast
    > table in the \dt+ of the normal table.
    
    I'm not for that: it's useless information in at least 99.44% of cases.
    
    Possibly it is useful in the other direction as Justin suggests.
    Not sure though --- generally, if you're looking at a specific
    toast table, you already know which table is its parent.  But
    maybe confirmation is a good thing.
    
    That seems off-topic for this thread though.  I agree with the
    stated premise that \d on a toast table should show all the same
    information \d on a regular table would.
    
    			regards, tom lane
    
    
    
    
  6. Re: make \d pg_toast.foo show its indices ; and, \d toast show its main table

    Justin Pryzby <pryzby@telsasoft.com> — 2019-05-06T16:22:51Z

    On Mon, May 06, 2019 at 09:13:52AM +0200, Rafia Sabih wrote:
    > On Fri, 3 May 2019 at 16:27, Justin Pryzby <pryzby@telsasoft.com> wrote:
    > >
    > > On Fri, May 03, 2019 at 02:55:47PM +0200, Rafia Sabih wrote:
    > > > On Mon, 22 Apr 2019 at 17:49, Justin Pryzby <pryzby@telsasoft.com> wrote:
    > > > >
    > > > > It's deliberate that \dt doesn't show toast tables.
    > > > > \d shows them, but doesn't show their indices.
    > > > >
    > > > > It seems to me that their indices should be shown, without having to think and
    > > > > know to query pg_index.
    > > > >
    > > > > postgres=# \d pg_toast.pg_toast_2600
    > > > > TOAST table "pg_toast.pg_toast_2600"
    > > > >    Column   |  Type
    > > > > ------------+---------
    > > > >  chunk_id   | oid
    > > > >  chunk_seq  | integer
    > > > >  chunk_data | bytea
    > > > > Indexes:
    > > > >     "pg_toast_2600_index" PRIMARY KEY, btree (chunk_id, chunk_seq)
    > > >
    > > > +1.
    > >
    > > Thanks - what about also showing the associated non-toast table ?
    > >
    > IMHO, what makes more sense is to show the name of associated toast
    > table in the \dt+ of the normal table.
    
    Perhaps ... but TOAST is an implementation detail, and I think it should rarely
    be important to know the toast table for a given table.
    
    I think it's more useful to go the other way (at least), to answer questions
    when pg_toast.* table shows up in a query like these:
    
     - SELECT relpages, relname FROM pg_class ORDER BY 1 DESC;
     - SELECT COUNT(1), relname FROM pg_class c JOIN pg_buffercache b ON b.relfilenode=c.oid GROUP BY 2 ORDER BY 1 DESC LIMIT 9;
    
    Justin
    
    
    
    
  7. Re: make \d pg_toast.foo show its indices

    Andres Freund <andres@anarazel.de> — 2019-05-06T16:26:31Z

    Hi,
    
    On 2019-05-06 11:58:18 -0400, Tom Lane wrote:
    > Not sure though --- generally, if you're looking at a specific
    > toast table, you already know which table is its parent.  But
    > maybe confirmation is a good thing.
    
    I'm not convinced by that. I've certainly many a time wrote queries
    against pg_class to figure out which relation a toast table belongs
    to. E.g. after looking at the largest relations in the system, looking
    at pg_stat_*_tables, after seeing an error in the logs, etc.
    
    
    > That seems off-topic for this thread though.  I agree with the
    > stated premise that \d on a toast table should show all the same
    > information \d on a regular table would.
    
    +1
    
    Greetings,
    
    Andres Freund
    
    
    
    
  8. Re: make \d pg_toast.foo show its indices ; and, \d toast show its main table

    Alvaro Herrera <alvherre@2ndquadrant.com> — 2019-05-06T16:33:59Z

    On 2019-May-06, Justin Pryzby wrote:
    
    > Perhaps ... but TOAST is an implementation detail, and I think it should rarely
    > be important to know the toast table for a given table.
    
    I'm with Andres -- while it's admittedly a rare need, it is a real one.
    
    Sometimes I wish for \d++ which would display internal details too obscure
    to show in the regular \d+, such as the toast table name.
    
    -- 
    Álvaro Herrera                https://www.2ndQuadrant.com/
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
    
    
    
    
  9. Re: make \d pg_toast.foo show its indices

    Robert Haas <robertmhaas@gmail.com> — 2019-05-06T17:52:23Z

    On Mon, May 6, 2019 at 12:26 PM Andres Freund <andres@anarazel.de> wrote:
    > I'm not convinced by that. I've certainly many a time wrote queries
    > against pg_class to figure out which relation a toast table belongs
    > to. E.g. after looking at the largest relations in the system, looking
    > at pg_stat_*_tables, after seeing an error in the logs, etc.
    
    +1.  I think it would be great for \d on the TOAST table to show this
    information.
    
    > > That seems off-topic for this thread though.  I agree with the
    > > stated premise that \d on a toast table should show all the same
    > > information \d on a regular table would.
    >
    > +1
    
    That premise seems like a good one, too.
    
    -- 
    Robert Haas
    EnterpriseDB: http://www.enterprisedb.com
    The Enterprise PostgreSQL Company
    
    
    
    
  10. Re: make \d pg_toast.foo show its indices

    Stephen Frost <sfrost@snowman.net> — 2019-05-07T15:16:00Z

    Greetings,
    
    * Tom Lane (tgl@sss.pgh.pa.us) wrote:
    > Rafia Sabih <rafia.pghackers@gmail.com> writes:
    > > On Fri, 3 May 2019 at 16:27, Justin Pryzby <pryzby@telsasoft.com> wrote:
    > >> Thanks - what about also showing the associated non-toast table ?
    > 
    > > IMHO, what makes more sense is to show the name of associated toast
    > > table in the \dt+ of the normal table.
    > 
    > I'm not for that: it's useless information in at least 99.44% of cases.
    
    I don't think I'd put it in \dt+, but the toast table is still
    pg_toast.pg_toast_{relOid}, right?  What about showing the OID of the
    table in the \d output, eg:
    
    => \d comments
               Table "public.comments" (50788)
     Column  |  Type   | Collation | Nullable |   Default
    
    etc?
    
    > Possibly it is useful in the other direction as Justin suggests.
    > Not sure though --- generally, if you're looking at a specific
    > toast table, you already know which table is its parent.  But
    > maybe confirmation is a good thing.
    
    As mentioned elsewhere, there are certainly times when you don't know
    that info and if you're looking at the definition of a TOAST table,
    which isn't terribly complex, it seems like a good idea to go ahead and
    include the table it's the TOAST table for.
    
    > That seems off-topic for this thread though.  I agree with the
    > stated premise that \d on a toast table should show all the same
    > information \d on a regular table would.
    
    +1
    
    Thanks!
    
    Stephen
    
  11. Re: make \d pg_toast.foo show its indices

    Tom Lane <tgl@sss.pgh.pa.us> — 2019-05-07T15:24:50Z

    Stephen Frost <sfrost@snowman.net> writes:
    > * Tom Lane (tgl@sss.pgh.pa.us) wrote:
    >> Rafia Sabih <rafia.pghackers@gmail.com> writes:
    >>> IMHO, what makes more sense is to show the name of associated toast
    >>> table in the \dt+ of the normal table.
    
    >> I'm not for that: it's useless information in at least 99.44% of cases.
    
    > I don't think I'd put it in \dt+, but the toast table is still
    > pg_toast.pg_toast_{relOid}, right?  What about showing the OID of the
    > table in the \d output, eg:
    > => \d comments
    >            Table "public.comments" (50788)
    
    Not unless you want to break every regression test that uses \d.
    Instability of the output is also a reason not to show the
    toast table's name in the parent's \d[+].
    
    >> Possibly it is useful in the other direction as Justin suggests.
    >> Not sure though --- generally, if you're looking at a specific
    >> toast table, you already know which table is its parent.  But
    >> maybe confirmation is a good thing.
    
    > As mentioned elsewhere, there are certainly times when you don't know
    > that info and if you're looking at the definition of a TOAST table,
    > which isn't terribly complex, it seems like a good idea to go ahead and
    > include the table it's the TOAST table for.
    
    I'm not against putting that info into the result of \d on the toast
    table.
    
    			regards, tom lane
    
    
    
    
  12. Re: make \d pg_toast.foo show its indices

    Stephen Frost <sfrost@snowman.net> — 2019-05-07T15:30:06Z

    Greetings,
    
    * Tom Lane (tgl@sss.pgh.pa.us) wrote:
    > Stephen Frost <sfrost@snowman.net> writes:
    > > * Tom Lane (tgl@sss.pgh.pa.us) wrote:
    > >> Rafia Sabih <rafia.pghackers@gmail.com> writes:
    > >>> IMHO, what makes more sense is to show the name of associated toast
    > >>> table in the \dt+ of the normal table.
    > 
    > >> I'm not for that: it's useless information in at least 99.44% of cases.
    > 
    > > I don't think I'd put it in \dt+, but the toast table is still
    > > pg_toast.pg_toast_{relOid}, right?  What about showing the OID of the
    > > table in the \d output, eg:
    > > => \d comments
    > >            Table "public.comments" (50788)
    > 
    > Not unless you want to break every regression test that uses \d.
    > Instability of the output is also a reason not to show the
    > toast table's name in the parent's \d[+].
    
    So we need a way to turn it off.  That doesn't seem like it'd be hard to
    implement and the information is certainly quite useful.
    
    Thanks,
    
    Stephen
    
  13. Re: make \d pg_toast.foo show its indices

    Robert Haas <robertmhaas@gmail.com> — 2019-05-07T20:44:53Z

    On Tue, May 7, 2019 at 11:30 AM Stephen Frost <sfrost@snowman.net> wrote:
    > > Not unless you want to break every regression test that uses \d.
    > > Instability of the output is also a reason not to show the
    > > toast table's name in the parent's \d[+].
    >
    > So we need a way to turn it off.  That doesn't seem like it'd be hard to
    > implement and the information is certainly quite useful.
    
    Ugh.  It's not really worth it if we have to go to such lengths.
    
    -- 
    Robert Haas
    EnterpriseDB: http://www.enterprisedb.com
    The Enterprise PostgreSQL Company
    
    
    
    
  14. Re: make \d pg_toast.foo show its indices

    Stephen Frost <sfrost@snowman.net> — 2019-05-07T20:48:09Z

    Greetings,
    
    * Robert Haas (robertmhaas@gmail.com) wrote:
    > On Tue, May 7, 2019 at 11:30 AM Stephen Frost <sfrost@snowman.net> wrote:
    > > > Not unless you want to break every regression test that uses \d.
    > > > Instability of the output is also a reason not to show the
    > > > toast table's name in the parent's \d[+].
    > >
    > > So we need a way to turn it off.  That doesn't seem like it'd be hard to
    > > implement and the information is certainly quite useful.
    > 
    > Ugh.  It's not really worth it if we have to go to such lengths.
    
    I don't think I agree..  We've gone to pretty great lengths to have
    things that can be turned on and off for explain because they're useful
    to have but not something that's predictible in the regression tests.
    This doesn't strike me as all that different (indeed, if anything it
    seems like it should be less of an issue since it's entirely client
    side...).
    
    Having our test framework deny us useful features just strikes me as
    bizarre.
    
    Thanks,
    
    Stephen
    
  15. Re: make \d pg_toast.foo show its indices

    Tom Lane <tgl@sss.pgh.pa.us> — 2019-05-07T21:49:41Z

    Stephen Frost <sfrost@snowman.net> writes:
    > Having our test framework deny us useful features just strikes me as
    > bizarre.
    
    This is presuming that it's useful, which is debatable IMO.
    I think most people will find it useless noise almost all of the time.
    
    			regards, tom lane
    
    
    
    
  16. Re: make \d pg_toast.foo show its indices

    Stephen Frost <sfrost@snowman.net> — 2019-05-07T22:03:29Z

    Greetings,
    
    * Tom Lane (tgl@sss.pgh.pa.us) wrote:
    > Stephen Frost <sfrost@snowman.net> writes:
    > > Having our test framework deny us useful features just strikes me as
    > > bizarre.
    > 
    > This is presuming that it's useful, which is debatable IMO.
    > I think most people will find it useless noise almost all of the time.
    
    Alright, maybe I'm not the best representation of our user base, but I
    sure type 'select oid,* from pg_class where relname = ...' with some
    regularity, mostly to get the oid to then go do something else.  Having
    the relfilenode would be nice too, now that I think about it, and
    reltuples.  There's ways to get *nearly* everything that's in pg_class
    and friends out of various \d incantations, but not quite everything,
    which seems unfortunate.
    
    In any case, I can understand an argument that the code it requires is
    too much to maintain for a relatively minor feature (though it hardly
    seems like it would be...) or that it would be confusing or unhelpful to
    users (aka "noise") much of the time, so I'll leave it to others to
    comment on if they think any of these ideas be a useful addition or not.
    
    I just don't think we should be voting down a feature because it'd take
    a bit of extra effort to make our regression tests work with it, which
    is all I was intending to get at here.
    
    Thanks!
    
    Stephen
    
  17. Re: make \d pg_toast.foo show its indices

    Robert Haas <robertmhaas@gmail.com> — 2019-05-08T14:18:13Z

    On Tue, May 7, 2019 at 6:03 PM Stephen Frost <sfrost@snowman.net> wrote:
    > Alright, maybe I'm not the best representation of our user base, but I
    > sure type 'select oid,* from pg_class where relname = ...' with some
    > regularity, mostly to get the oid to then go do something else.  Having
    > the relfilenode would be nice too, now that I think about it, and
    > reltuples.  There's ways to get *nearly* everything that's in pg_class
    > and friends out of various \d incantations, but not quite everything,
    > which seems unfortunate.
    >
    > In any case, I can understand an argument that the code it requires is
    > too much to maintain for a relatively minor feature (though it hardly
    > seems like it would be...) or that it would be confusing or unhelpful to
    > users (aka "noise") much of the time, so I'll leave it to others to
    > comment on if they think any of these ideas be a useful addition or not.
    >
    > I just don't think we should be voting down a feature because it'd take
    > a bit of extra effort to make our regression tests work with it, which
    > is all I was intending to get at here.
    
    I think it's unjustifiable to show this in \d output.  But maybe in
    \d+ output it could be justified, or perhaps in the \d++ which I seem
    to recall Alvaro proposing someplace recently.
    
    I think if we're going to show it, it should be on its own line, with
    a clear label, not just in the table header as you proposed.
    Otherwise, people won't know what it is.
    
    I suppose the work we'd need to make it work with the regression tests
    is no worse than the hide_tableam crock which Andres recently added.
    That is certainly a crock, but I can testify that it's a very useful
    crock for zheap development.
    
    -- 
    Robert Haas
    EnterpriseDB: http://www.enterprisedb.com
    The Enterprise PostgreSQL Company
    
    
    
    
  18. Re: make \d pg_toast.foo show its indices

    Tom Lane <tgl@sss.pgh.pa.us> — 2019-05-08T14:28:56Z

    Robert Haas <robertmhaas@gmail.com> writes:
    > I think it's unjustifiable to show this in \d output.  But maybe in
    > \d+ output it could be justified, or perhaps in the \d++ which I seem
    > to recall Alvaro proposing someplace recently.
    
    Yeah, if we're going to do that (show a table's toast table) I would
    want to bury it in \d++ or some other not-currently-used notation.
    
    			regards, tom lane
    
    
    
    
  19. Re: make \d pg_toast.foo show its indices ; and, \d toast show its main table ; and \d relkind=I show its partitions (and tablespace)

    Justin Pryzby <pryzby@telsasoft.com> — 2019-06-23T14:25:47Z

    I'm continuing this thread with an additional change to slash dee for
    partitioned indexes.
    
    postgres=# \d ttz_i_idx
     Partitioned index "public.ttz_i_idx"
     Column |  Type   | Key? | Definition 
    --------+---------+------+------------
     i      | integer | yes  | i
    btree, for table "public.ttz"
    Number of partitions: 2 (Use \d+ to list them.)
    
    postgres=# \d+ ttz_i_idx
                 Partitioned index "public.ttz_i_idx"
     Column |  Type   | Key? | Definition | Storage | Stats target 
    --------+---------+------+------------+---------+--------------
     i      | integer | yes  | i          | plain   | 
    btree, for table "public.ttz"
    Partitions: ttz1_i_idx,
                ttz2_i_idx, PARTITIONED
    
    Showing the list of index partitions is probably not frequently useful, but
    consider the case of non-default names, for example due to truncation.
    
    I didn't update regression output; note that this patch also, by chance, causes
    tablespace of partitioned indexes to be output, which I think is good and an
    oversight that it isn't currently shown.
    
    I added CF entry and including previous two patches for CFBOT purposes.
    
    Recap: Tom, Andreas, Robert, Stephen and I agree that \d toast should show the
    main table.  Rafia and Alvaro think that \d on the main table should (also?)
    show its toast.
    
    Justin
    
  20. Re: make \d pg_toast.foo show its indices ; and, \d toast show its main table ; and \d relkind=I show its partitions (and tablespace)

    Justin Pryzby <pryzby@telsasoft.com> — 2019-06-27T23:02:02Z

    My previous patch missed a 1-line hunk, so resending.
    
  21. Re: make \d pg_toast.foo show its indices ; and, \d toast show its main table ; and \d relkind=I show its partitions (and tablespace)

    Fabien COELHO <coelho@cri.ensmp.fr> — 2019-06-30T08:26:28Z

    There are 3 independent patches associated to one thread and one CF entry.
    
    
    *** About toast table v3:
    
    Patch applies cleanly, compiles, works for me.
    
    ISTM that the he query should be unambiguous: pg_catalog.pg_class instead 
    of pg_class, add an alias (eg c), use c.FIELD to access an attribute. In 
    its current form "pg_class" could resolve to another table depending on 
    the search path.
    
    C style is broken. On "if () {", brace must be on next line. On "1 != 
    PQntuples(result)", I would exchange operands.
    
    PQclear must be called on the main path.
    
    If the table name contains a ", the result looks awkward:
    
     	For table: "public.foo"bla"
    
    I'm wondering whether some escaping should be done. Well, it is not done 
    for other simular entries, so probably this is bad but okay:-)
    
    There are no tests:-(
    
    
    *** About toast index v3
    
    Patch applies cleanly, compiles, works for me.
    
    There are no tests:-(
    
    *** About the next one, v4
    
    Patch applies cleanly, compiles. Not sure how to test it.
    
    "switch (*PQgetvalue(result, i, 2))": I understand that relkind is a must 
    admit I do not like this style much, an intermediate variable would 
    improve readability. Also, a simple if instead of a swich might be more 
    appropriate, and be closer to the previous implementation.
    
    There are no tests:-(
    
    -- 
    Fabien.
    
    
    
    
  22. Re: make \d pg_toast.foo show its indices ; and, \d toast show its main table ; and \d relkind=I show its partitions (and tablespace)

    Justin Pryzby <pryzby@telsasoft.com> — 2019-07-16T05:01:24Z

    Sorry, I missed this until now.
    
    On Sun, Jun 30, 2019 at 10:26:28AM +0200, Fabien COELHO wrote:
    > *** About toast table v3:
    > 
    > Patch applies cleanly, compiles, works for me.
    > 
    > ISTM that the he query should be unambiguous: pg_catalog.pg_class instead of
    > pg_class, add an alias (eg c), use c.FIELD to access an attribute. In its
    > current form "pg_class" could resolve to another table depending on the
    > search path.
    
    Thanks for noticing, fixed.
    
    > C style is broken. On "if () {", brace must be on next line. On "1 !=
    > PQntuples(result)", I would exchange operands.
    > 
    > PQclear must be called on the main path.
    
    Done
    
    > There are no tests:-(
    
    "show-childs" caused plenty of tests fail; actually..it looks like my previous
    patch duplicated "tablespace" line for indices (and I managed to not notice the
    original one, and claimed my patch fixed that omission, sigh).  I added test
    that it shows its partitions, too.
    
    It seems like an obviously good idea to add tests for \d toast; it's not clear
    to me how to do run \d for a toast table, which is named after a user table's
    OID...  (I tested that \gexec doesn't work for this).
    
    So for now I used \d pg_toast.pg_toast_2619
    
    > If the table name contains a ", the result looks awkward:
    > 
    > 	For table: "public.foo"bla"
    > 
    > I'm wondering whether some escaping should be done. Well, it is not done for
    > other simular entries, so probably this is bad but okay:-)
    
    Leaving this for another commit-day.
    
    Thanks for testing.
    
    Justin
    
  23. Re: make \d pg_toast.foo show its indices ; and, \d toast show its main table ; and \d relkind=I show its partitions

    Justin Pryzby <pryzby@telsasoft.com> — 2019-07-16T14:06:36Z

    I realized that the test added to show-childs patch was listing partitioned
    tables not indices..fixed.
    
  24. Re: make \d pg_toast.foo show its indices ; and, \d toast show its main table ; and \d relkind=I show its partitions

    Justin Pryzby <pryzby@telsasoft.com> — 2019-07-17T06:26:34Z

    Find attached updated patches which also work against old servers.
    
    1) avoid ::regnamespace; 2) don't PQgetvalue() fields which don't exist and then crash.
    
  25. Re: make \d pg_toast.foo show its indices ; and, \d toast show its main table ; and \d relkind=I show its partitions

    Fabien COELHO <coelho@cri.ensmp.fr> — 2019-07-23T07:19:00Z

    > Find attached updated patches which also work against old servers.
    
    I can't check that for sure.
    
    * About toast table addition v7:
    
    Patch applies cleanly, compiles, make check ok, no doc.
    
    This addition show the main table of a toast table, which is useful.
    
    Field relnamespace oid in pg_class appears with pg 7.3, maybe it would be 
    appropriate to guard agains older versions, with "pset.sversion >= 70300". 
    It seems that there are other unguarded instances in "describe.c", so 
    maybe this is considered too old.
    
    Test is ok.
    
    * About toast index v7:
    
    Patch applies cleanly on top of previous, compiles, make check ok, no doc.
    
    This patch simply enables an existing query on toast tables so as to show 
    corresponding indices.
    
    Test is ok.
    
    * About toast part v7.
    
    Patch applies cleanly, compiles, make check ok, no doc.
    
    It gives the partition info about an index as it is shown about a table, 
    which is useful.
    
    There are some changes in the query on older systems, which seem harmless.
    The code is rather simplified because a special case is removed, which is 
    a good thing.
    
    Test is ok.
    
    Marked as ready.
    
    -- 
    Fabien.
    
    
    
    
  26. Re: make \d pg_toast.foo show its indices ; and, \d toast show its main table ; and \d relkind=I show its partitions

    Tom Lane <tgl@sss.pgh.pa.us> — 2019-07-23T21:08:38Z

    Fabien COELHO <coelho@cri.ensmp.fr> writes:
    > Field relnamespace oid in pg_class appears with pg 7.3, maybe it would be 
    > appropriate to guard agains older versions, with "pset.sversion >= 70300". 
    > It seems that there are other unguarded instances in "describe.c", so 
    > maybe this is considered too old.
    
    Per the comment at the head of describe.c, we only expect it to work
    back to 7.4.  I tested against a 7.4 server, the modified queries
    seem fine.
    
    > Marked as ready.
    
    Pushed with minor fiddling with the toast-table code, and rather
    more significant hacking on the partitioned-index code.  Notably,
    0003 had broken output of Tablespace: footers for everything except
    indexes.  It's possibly not Justin's fault that that wasn't noticed,
    because we had no regression tests covering it :-(.  We do now.
    
    			regards, tom lane
    
    
    
    
  27. Re: make \d pg_toast.foo show its indices ; and, \d toast show its main table ; and \d relkind=I show its partitions

    Fabien COELHO <coelho@cri.ensmp.fr> — 2019-07-23T22:06:58Z

    > Pushed with minor fiddling with the toast-table code, and rather
    > more significant hacking on the partitioned-index code.  Notably,
    > 0003 had broken output of Tablespace: footers for everything except
    > indexes.
    
    Argh, sorry for the review miss.
    
    > It's possibly not Justin's fault that that wasn't noticed,
    > because we had no regression tests covering it :-(.  We do now.
    
    Thanks.
    
    -- 
    Fabien.