[Bug] UPDATE of the distribution key fails with "can't split update for inherit table" after the child table is dropped
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 65/100
Línea de trabajo
The bug is in the Postgres planner code, likely in preptlist.c line 140. Start by examining the function that checks for inheritance children before splitting an UPDATE on a distribution key. Look at how relhassubclass is used versus find_inheritance_children() or pg_inherits. The fix should replace the hint check with a direct lookup of actual children. Run the provided reproduction script to verify the error and that ANALYZE clears it. Test with optimizer=off to ensure the fix works for the Postgres planner.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Apache Cloudberry version
main; REL_2_STABLE
What happened
UPDATE of a distribution-key column is rejected for a table that has inheritance children:
ERROR: can't split update for inherit table: pinh (preptlist.c:140)
The error persists after all child tables are dropped. The check relies on pg_class.relhassubclass, which PostgreSQL does not clear when the last child is dropped; only ANALYZE or VACUUM clears it lazily. As a result, a plain table with no children refuses to update its distribution key until somebody runs ANALYZE on it.
On REL_2_STABLE, this happens with the Postgres planner (optimizer = off). With GPORCA, the same UPDATE after DROP TABLE cinh succeeds.
What you think should happen instead
Once the table has no inheritance children, updating its distribution key should work as it does for any other table. The check should look at the actual children (for example find_inheritance_children() / pg_inherits), not at relhassubclass, which is only a hint.
How to reproduce
create table pinh(a int, b int) distributed by (b);
create table cinh() inherits (pinh);
insert into pinh values (1,1);
update pinh set a = a + 1; -- OK, not a distribution key
update pinh set b = b + 1; -- ERROR: can't split update for inherit table: pinh
drop table cinh;
select count(*) from pg_inherits where inhparent = 'pinh'::regclass; -- 0, no children
select relhassubclass from pg_class where oid = 'pinh'::regclass; -- t, stale flag
update pinh set b = b + 1; -- still ERROR: can't split update for inherit table: pinh
analyze pinh;
select relhassubclass from pg_class where oid = 'pinh'::regclass; -- f
update pinh set b = b + 1; -- UPDATE 1
Operating System
any
Anything else
No response
Are you willing to submit PR?
- Yes, I am willing to submit a PR!
Code of Conduct
- I agree to follow this project's Code of Conduct.
- Lenguaje dominante
- C
- Estrellas
- 1.4k
- Forks
- 248
- Merge medio
- 4 d 10 h
- PR fusionados (30 d)
- 40
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de apache/cloudberry
-
type: Bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
apache/cloudberry#1885 · 2 reacciones ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
apache/cloudberry#1825 ·
-
type: Bug
Dificultad 4/5 3-5 días Aptitud para principiantes 40/100
apache/cloudberry#2047 ·
-
type: Bug
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
apache/cloudberry#2046 · 1 comentario ·
-
type: Bug
Dificultad 4/5 3-5 días Aptitud para principiantes 52/100
apache/cloudberry#2026 · 1 comentario · 1 reacción ·
Todos los issues de apache/cloudberry
Issues similares
-
task
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
vsanthanam/JBird#429 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
bug documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
es-ude/OnDeviceTraining#459 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
bilelmoussaoui/gobject-linter#199 · 1 comentario ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
bradcypert/plum#53 ·