Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[Bug] UPDATE of the distribution key fails with "can't split update for inherit table" after the child table is dropped

Abierto
#2,048 0 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
65/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
c, postgresql
Área
databases

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

type: Bug
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
Lenguaje dominante
C
Estrellas
1.4k
Forks
248
Merge medio
4 d 10 h
PR fusionados (30 d)
40

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de apache/cloudberry

Todos los issues de apache/cloudberry

Issues similares

Más issues de C

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.