code question: rewriteDefine.c

Поиск
Список
Период
Сортировка
От Neil Conway
Тема code question: rewriteDefine.c
Дата
Msg-id 8765he8en9.fsf@mailbox.samurai.com
обсуждение исходный текст
Ответы Re: code question: rewriteDefine.c
Список pgsql-hackers
I noticed the following code in src/backend/rewrite/rewriteDefine.c,
circa line 390:
    /*     * Are we converting a relation to a view?     *     * If so, check that the relation is empty because the
storage    * for the relation is going to be deleted.  Also insist that     * the rel not have any triggers, indexes,
orchild tables.     */    if (event_relation->rd_rel->relkind != RELKIND_VIEW)    {
 

Under what circumstances do we "convert a relation to a view"? Is this
functionality exposed to the user?

Furthermore, it seems broken: it checks the pgclass.relhassubclass
attribute for this relation to see "if it has child tables", but this
is wrong, as relhassubclass only indicates that the relation MAY have
a subclass, not that is definitely does[1]. It also doesn't drop the
relation's TOAST table, if any, as the code itself notes.

-Neil

[1] This is because relhassubclass is not updated when a table's child
table is dropped, due to concurrency concerns; see has_subclass() in
plancat.c



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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: PANIC: rename from /data/pg_xlog/0000002200000009
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Sponsoring enterprise features