Re: ToDo: show size of partitioned table

Поиск
Список
Период
Сортировка
От Alvaro Herrera
Тема Re: ToDo: show size of partitioned table
Дата
Msg-id 20190407182735.GA25307@alvherre.pgsql
обсуждение исходный текст
Ответ на Re: ToDo: show size of partitioned table  (Pavel Stehule <pavel.stehule@gmail.com>)
Ответы Re: ToDo: show size of partitioned table  (Pavel Stehule <pavel.stehule@gmail.com>)
Список pgsql-hackers
On 2019-Apr-07, Pavel Stehule wrote:

> ne 7. 4. 2019 v 19:16 odesílatel Alvaro Herrera <alvherre@2ndquadrant.com>
> napsal:
> 
> > Here.
> 
> + 1

BTW I'm not sure if you noticed, but I removed the error message "no
partitioned relations found" when the result was empty.  This was
mimicking \d behavior (which was justified on historical grounds), and
\drds behavior (which was justified on pattern ordering grounds); but I
see nothing that justifies it for \dP, so let's make it behave like all
the other commands and display an empty table.

And there's an additional change to make.  In the regression database,
this returns an empty table:

regression=# \dPi regress_indexing.pk5_pkey 
     List of partitioned indexes
 Esquema | Nombre | Dueño | On table 
---------+--------+-------+----------
(0 filas)

but the index does exist, and it is a partitioned one.  So it should be
displayed.  In fact, if I add the "n" flag, it shows:

regression=# \dPin regress_indexing.pk5_pkey 
                               List of partitioned indexes
     Esquema      |  Nombre  |  Dueño   |       Parent name        |       On table       
------------------+----------+----------+--------------------------+----------------------
 regress_indexing | pk5_pkey | alvherre | regress_indexing.pk_pkey | regress_indexing.pk5
(1 fila)

I think the fact that \dPi doesn't show it is broken, and this fixes it:

@@ -3946,7 +3946,8 @@ listPartitionedTables(const char *reltypes, const char *pattern, bool verbose)
     appendPQExpBufferStr(&buf, "''");    /* dummy */
     appendPQExpBufferStr(&buf, ")\n");
 
-    appendPQExpBufferStr(&buf, !showNested ? " AND NOT c.relispartition\n" : "\n");
+    appendPQExpBufferStr(&buf, !showNested && !pattern ?
+                         " AND NOT c.relispartition\n" : "");
 
     if (!pattern)
         appendPQExpBufferStr(&buf, "      AND n.nspname <> 'pg_catalog'\n"

In order for this to display sanely, I added the "Parent name" column if
either the "n" flag is shown or a pattern is given (previously it only
appeared in the former case).

Note that this changes the expected output in the test; now every test
that uses a pattern displays *all* partitioned relations that match the
pattern, not just top-level ones.  I'm about +0.2 convinced that this is
desirable, but my first example above tilts the scales to changing it as
described.

I noticed this while testing after messing with the tab completion as
suggested by Justin: we already had Query_for_list_of_partitioned_tables
(which you could have used), but since \dP works for both indexes and
tables, I instead modified your new
Query_for_list_of_partitioned_relations to list both relation kinds.

-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services



В списке pgsql-hackers по дате отправления:

Предыдущее
От: David Fetter
Дата:
Сообщение: Re: change password_encryption default to scram-sha-256?
Следующее
От: Pavel Stehule
Дата:
Сообщение: Re: ToDo: show size of partitioned table