Re: psql display of foreign keys

Поиск
Список
Период
Сортировка
От Alvaro Herrera
Тема Re: psql display of foreign keys
Дата
Msg-id 20181204184159.eue3wlchqrkh4vsc@alvherre.pgsql
обсуждение исходный текст
Ответ на Re: psql display of foreign keys  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: psql display of foreign keys  (Alvaro Herrera <alvherre@2ndquadrant.com>)
Re: psql display of foreign keys  (Michael Paquier <michael@paquier.xyz>)
Re: psql display of foreign keys  (Alvaro Herrera <alvherre@2ndquadrant.com>)
Список pgsql-hackers
On 2018-Dec-04, Tom Lane wrote:

> ... this patch breaks the expectation set at the top of describe.c:
> 
>  * Support for the various \d ("describe") commands.  Note that the current
>  * expectation is that all functions in this file will succeed when working
>  * with servers of versions 7.4 and up.  It's okay to omit irrelevant
>  * information for an old server, but not to fail outright.

Fixed in the attached.

> Do you really need WITH RECURSIVE for this?

I don't see any other way, but I'm open to ideas.

> If so, I'd suggest applying it only when relkind ==
> RELKIND_PARTITIONED_TABLE, so that the case doesn't happen in servers
> too old to have WITH.  That's probably a win performance-wise anyway,
> as I have no doubt that the performance of this query is awful
> compared to what it replaces, so we don't really want to use it if we
> don't have to.

The query to display foreign keys on the current table can continue to
use the old, fast version when the table is not a partition (I had to
add the relispartition column to another query for this to work).  But I
cannot use the old version for the query that searches for FKs
referencing the current table, because the table for which
partitionedness matters is the other one.  (The WITH version is only
used for servers that can have foreign keys on partitioned tables, viz.
11).

I spent a few minutes trying to think of a way of determining which
query to use at SQL-execution time -- two CTEs, one of which would be
short-circuited ... but I couldn't figure out how.  I also tried to use
the new pg_partition_tree() function, but it's useless for this purpose
because it roots at its argument table, and there doesn't seem to be a
convenient way to obtain the topmost ancestor.

v2 attached.

Many thanks for reviewing.

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


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

Предыдущее
От: Pavel Stehule
Дата:
Сообщение: proposal: plpgsql pragma statement
Следующее
От: Alvaro Herrera
Дата:
Сообщение: Re: psql display of foreign keys