pgsql: Further fix ALTER COLUMN TYPE's handling of indexes and indexco

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Further fix ALTER COLUMN TYPE's handling of indexes and indexco
Дата
Msg-id E1hfVok-00070V-1Q@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Further fix ALTER COLUMN TYPE's handling of indexes and index constraints.

This patch reverts all the code changes of commit e76de8861, which turns
out to have been seriously misguided.  We can't wait till later to compute
the definition string for an index; we must capture that before applying
the data type change for any column it depends on, else ruleutils.c will
deliverr wrong/misleading results.  (This fine point was documented
nowhere, of course.)

I'd also managed to forget that ATExecAlterColumnType executes once per
ALTER COLUMN TYPE clause, not once per statement; which resulted in the
code being basically completely broken for any case in which multiple ALTER
COLUMN TYPE clauses are applied to a table having non-constraint indexes
that must be rebuilt.  Through very bad luck, none of the existing test
cases nor the ones added by e76de8861 caught that, but of course it was
soon found in the field.

The previous patch also had an implicit assumption that if a constraint's
index had a dependency on a table column, so would the constraint --- but
that isn't actually true, so it didn't fix such cases.

Instead of trying to delete unneeded index dependencies later, do the
is-there-a-constraint lookup immediately on seeing an index dependency,
and switch to remembering the constraint if so.  In the unusual case of
multiple column dependencies for a constraint index, this will result in
duplicate constraint lookups, but that's not that horrible compared to all
the other work that happens here.  Besides, such cases did not work at all
before, so it's hard to argue that they're performance-critical for anyone.

Per bug #15865 from Keith Fiske.  As before, back-patch to all supported
branches.

Discussion: https://postgr.es/m/15865-17940eacc8f8b081@postgresql.org

Branch
------
REL_11_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/afaf48afb107b58863d098a4bebf97f78971c1fe

Modified Files
--------------
src/backend/commands/tablecmds.c          | 141 ++++++++++++++++--------------
src/test/regress/expected/alter_table.out |  22 ++++-
src/test/regress/sql/alter_table.sql      |  12 ++-
3 files changed, 103 insertions(+), 72 deletions(-)


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

Предыдущее
От: Peter Geoghegan
Дата:
Сообщение: pgsql: Correct obsolete amcheck comments.
Следующее
От: Peter Eisentraut
Дата:
Сообщение: pgsql: Correct script name in README file