Alena0704 opened a new issue, #2048:
URL: https://github.com/apache/cloudberry/issues/2048

   ### 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
   
   ```sql
   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?
   
   - [x] Yes, I am willing to submit a PR!
   
   ### Code of Conduct
   
   - [x] I agree to follow this project's [Code of 
Conduct](https://github.com/apache/cloudberry/blob/main/CODE_OF_CONDUCT.md).
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to