This is an automated email from the ASF dual-hosted git repository.
roseduan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git
The following commit(s) were added to refs/heads/main by this push:
new 9c3d48edf52 Fix: pg_task / pg_task_run_history column reorder with
catversion bump (#1817)
9c3d48edf52 is described below
commit 9c3d48edf52777fbe41b310edb485e9ae8989ef5
Author: roseduan <[email protected]>
AuthorDate: Wed Jul 22 11:10:54 2026 +0800
Fix: pg_task / pg_task_run_history column reorder with catversion bump
(#1817)
Some non-varlen fields (int32 nodeport, bool active in pg_task;
timestamptz start_time / end_time in pg_task_run_history) were
declared after CATALOG_VARLEN, which trips LLVM bitcode emission
during JIT compilation.
Move them ahead of the varlen block. Because this rearranges the
on-disk pg_attribute layout, bump CATALOG_VERSION_NO so an upgraded
binary refuses to start against a pre-reorder cluster instead of
crashing at runtime with SIGSEGV in heap_form_tuple on the first
CREATE TASK.
Adjust ruleutils.c pg_get_dynamic_table_schedule() to fetch the
schedule via heap_getattr() since &task->schedule on the Form
struct is no longer valid for varlen-section fields.
---
src/backend/utils/adt/ruleutils.c | 17 +++++++++++------
src/include/catalog/catversion.h | 2 +-
src/include/catalog/pg_task.h | 8 +++++---
src/include/catalog/pg_task_run_history.h | 12 +++++++-----
4 files changed, 24 insertions(+), 15 deletions(-)
diff --git a/src/backend/utils/adt/ruleutils.c
b/src/backend/utils/adt/ruleutils.c
index d60a38a0a0a..fd9c4daea67 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -13158,14 +13158,16 @@ flatten_reloptions(Oid relid)
Datum
pg_get_dynamic_table_schedule(PG_FUNCTION_ARGS)
{
- Oid relid = PG_GETARG_OID(0);
- Relation pg_task;
- StringInfoData buf;
- char *username;
+ Oid relid = PG_GETARG_OID(0);
+ Relation pg_task;
+ StringInfoData buf;
+ char *username;
SysScanDesc scanDescriptor = NULL;
- ScanKeyData scanKey[2];
+ ScanKeyData scanKey[2];
HeapTuple heapTuple = NULL;
Form_pg_task task = NULL;
+ bool isnull;
+ Datum datum;
if (!get_rel_relisdynamic(relid))
{
@@ -13209,7 +13211,10 @@ pg_get_dynamic_table_schedule(PG_FUNCTION_ARGS)
task = (Form_pg_task) GETSTRUCT(heapTuple);
resetStringInfo(&buf);
- appendStringInfo(&buf, "%s", text_to_cstring(&task->schedule));
+ datum = heap_getattr(heapTuple, Anum_pg_task_schedule,
+ RelationGetDescr(pg_task),
&isnull);
+ if (!isnull)
+ appendStringInfo(&buf, "%s", TextDatumGetCString(datum));
systable_endscan(scanDescriptor);
table_close(pg_task, AccessShareLock);
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index 3de2e549f4c..851e58debc3 100644
--- a/src/include/catalog/catversion.h
+++ b/src/include/catalog/catversion.h
@@ -60,6 +60,6 @@
*/
/* 3yyymmddN */
-#define CATALOG_VERSION_NO 302512051
+#define CATALOG_VERSION_NO 302606111
#endif
diff --git a/src/include/catalog/pg_task.h b/src/include/catalog/pg_task.h
index 387d5945748..e58128b7b65 100644
--- a/src/include/catalog/pg_task.h
+++ b/src/include/catalog/pg_task.h
@@ -39,14 +39,16 @@
CATALOG(pg_task,9637,TaskRelationId) BKI_SHARED_RELATION
{
Oid jobid;
+ int32 nodeport;
+ bool active BKI_DEFAULT(t);
+#ifdef CATALOG_VARLEN /* variable-length fields start here */
text schedule;
text command;
text nodename;
- int32 nodeport;
text database;
text username;
- bool active BKI_DEFAULT(t);
- text jobname;
+ text jobname BKI_FORCE_NULL;
+#endif
} FormData_pg_task;
typedef FormData_pg_task *Form_pg_task;
diff --git a/src/include/catalog/pg_task_run_history.h
b/src/include/catalog/pg_task_run_history.h
index fdb636c7f00..74bd5883a46 100644
--- a/src/include/catalog/pg_task_run_history.h
+++ b/src/include/catalog/pg_task_run_history.h
@@ -41,16 +41,18 @@
*/
CATALOG(pg_task_run_history,9993,TaskRunHistoryRelationId) BKI_SHARED_RELATION
{
- Oid runid;
- Oid jobid;
+ Oid runid;
+ Oid jobid;
int32 job_pid BKI_DEFAULT(0);
+ timestamptz start_time BKI_FORCE_NULL;
+ timestamptz end_time BKI_FORCE_NULL;
+#ifdef CATALOG_VARLEN /* variable-length fields start here */
text database;
text username;
text command;
text status;
- text return_message;
- timestamptz start_time;
- timestamptz end_time;
+ text return_message BKI_FORCE_NULL;
+#endif
} FormData_pg_task_run_history;
typedef FormData_pg_task_run_history *Form_pg_task_run_history;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]