citus icon indicating copy to clipboard operation
citus copied to clipboard

PostgreSQL 18 support

Open devrimgunduz opened this issue 6 months ago • 6 comments

Hi,

v18 beta1 is already out, so I started testing extensions against PostgreSQL 18. Citus 13.1.0 is failing with these errors (after updating configure for v18). Can you please take a look? Thanks!

gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -Wmissing-variable-declarations -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fvisibility=hidden -std=gnu99 -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-missing-field-initializers -Wno-clobbered -Wno-declaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wmissing-declarations -Wmissing-prototypes -Wshadow -Werror=vla -Werror=implicit-int -Werror=implicit-function-declaration -Werror=return-type -fstack-clash-protection -I '/home/devrim/belgeler/Devrim/Projects/repo/pgrpms/rpm/redhat/main/non-common/citus/main/citus-13.1.0/src/include' -I'../../../src/include' -I/usr/pgsql-18/include -I/home/devrim/belgeler/Devrim/Projects/repo/pgrpms/rpm/redhat/main/non-common/citus/main/citus-13.1.0/vendor/safestringlib/include -I. -I./ -I/usr/pgsql-18/include/server -I/usr/pgsql-18/include/internal    -D_GNU_SOURCE -I/usr/include/libxml2 -DWITH_GZFILEOP  -I/usr/include  -c -o write_state_management.o write_state_management.c
columnar_metadata.c: In function ‘SaveStripeSkipList’:
columnar_metadata.c:648:114: error: ‘struct TupleDescData’ has no member named ‘attrs’
  648 |                                                                                                  &tupleDescriptor->attrs[columnIndex]));
      |                                                                                                                  ^~
columnar_metadata.c:651:114: error: ‘struct TupleDescData’ has no member named ‘attrs’
  651 |                                                                                                  &tupleDescriptor->attrs[columnIndex]));
      |                                                                                                                  ^~
columnar_metadata.c: In function ‘ReadStripeSkipList’:
columnar_metadata.c:806:72: error: ‘struct TupleDescData’ has no member named ‘attrs’
  806 |                                 ByteaToDatum(minValue, &tupleDescriptor->attrs[columnIndex]);
      |                                                                        ^~
columnar_metadata.c:808:72: error: ‘struct TupleDescData’ has no member named ‘attrs’
  808 |                                 ByteaToDatum(maxValue, &tupleDescriptor->attrs[columnIndex]);
      |                                                                        ^~
columnar_metadata.c: In function ‘UpdateStripeMetadataRow’:
columnar_metadata.c:1426:9: error: implicit declaration of function ‘heap_inplace_update’; did you mean ‘heap_inplace_unlock’? [-Wimplicit-function-declaration]
 1426 |         heap_inplace_update(columnarStripes, modifiedTuple);
      |         ^~~~~~~~~~~~~~~~~~~
      |         heap_inplace_unlock
columnar_metadata.c: In function ‘create_estate_for_relation’:
columnar_metadata.c:1733:9: error: too few arguments to function ‘ExecInitRangeTable’; expected 4, have 3
 1733 |         ExecInitRangeTable(estate, list_make1(rte), perminfos);
      |         ^~~~~~~~~~~~~~~~~~
In file included from columnar_metadata.c:42:
/usr/pgsql-18/include/server/executor/executor.h:713:13: note: declared here
  713 | extern void ExecInitRangeTable(EState *estate, List *rangeTable, List *permInfos,
      |             ^~~~~~~~~~~~~~~~~~
make[1]: *** [<builtin>: columnar_metadata.o] Error 1
make[1]: *** Waiting for unfinished jobs....
columnar_tableam.c: In function ‘NeededColumnsList’:
columnar_tableam.c:1015:28: error: ‘struct TupleDescData’ has no member named ‘attrs’
 1015 |                 if (tupdesc->attrs[i].attisdropped)
      |                            ^~
columnar_tableam.c: In function ‘columnar_vacuum_rel’:
columnar_tableam.c:1127:49: error: passing argument 8 of ‘vac_update_relstats’ makes integer from pointer without a cast [-Wint-conversion]
 1127 |                                                 &frozenxid_updated, &minmulti_updated, false);
      |                                                 ^~~~~~~~~~~~~~~~~~
      |                                                 |
      |                                                 _Bool *
In file included from columnar_tableam.c:30:
/usr/pgsql-18/include/server/commands/vacuum.h:356:77: note: expected ‘MultiXactId’ {aka ‘unsigned int’} but argument is of type ‘_Bool *’
  356 |                                                                 MultiXactId minmulti,
      |                                                                 ~~~~~~~~~~~~^~~~~~~~
columnar_tableam.c:1124:9: error: too few arguments to function ‘vac_update_relstats’; expected 11, have 10
 1124 |         vac_update_relstats(rel, new_rel_pages, new_live_tuples,
      |         ^~~~~~~~~~~~~~~~~~~
/usr/pgsql-18/include/server/commands/vacuum.h:349:13: note: declared here
  349 | extern void vac_update_relstats(Relation relation,
      |             ^~~~~~~~~~~~~~~~~~~
columnar_tableam.c:1190:9: error: too few arguments to function ‘pgstat_report_vacuum’; expected 5, have 4
 1190 |         pgstat_report_vacuum(RelationGetRelid(rel),
      |         ^~~~~~~~~~~~~~~~~~~~
In file included from columnar_tableam.c:6:
/usr/pgsql-18/include/server/pgstat.h:661:13: note: declared here
  661 | extern void pgstat_report_vacuum(Oid tableoid, bool shared,
      |             ^~~~~~~~~~~~~~~~~~~~
columnar_tableam.c: In function ‘LogRelationStats’:
columnar_tableam.c:1228:51: error: ‘struct TupleDescData’ has no member named ‘attrs’
 1228 |                         bool attrDropped = tupdesc->attrs[column].attisdropped;
      |                                                   ^~
columnar_tableam.c: At top level:
columnar_tableam.c:2567:10: error: ‘TableAmRoutine’ has no member named ‘scan_bitmap_next_block’; did you mean ‘scan_bitmap_next_tuple’?
 2567 |         .scan_bitmap_next_block = NULL,
      |          ^~~~~~~~~~~~~~~~~~~~~~
      |          scan_bitmap_next_tuple
columnar_tableam.c:2568:35: warning: initialized field overwritten [-Woverride-init]
 2568 |         .scan_bitmap_next_tuple = NULL,
      |                                   ^~~~
columnar_tableam.c:2568:35: note: (near initialization for ‘columnar_am_methods.scan_bitmap_next_tuple’)
columnar_tableam.c: In function ‘detoast_values’:
columnar_tableam.c:2606:44: error: ‘struct TupleDescData’ has no member named ‘attrs’
 2606 |                 if (!isnull[i] && tupleDesc->attrs[i].attlen == -1 &&
      |                                            ^~
make[1]: *** [<builtin>: columnar_tableam.o] Error 1
columnar_customscan.c:151:32: warning: no previous declaration for ‘ColumnarScanPathMethods’ [-Wmissing-variable-declarations]
  151 | const struct CustomPathMethods ColumnarScanPathMethods = {
      |                                ^~~~~~~~~~~~~~~~~~~~~~~
columnar_customscan.c:157:32: warning: no previous declaration for ‘ColumnarScanScanMethods’ [-Wmissing-variable-declarations]
  157 | const struct CustomScanMethods ColumnarScanScanMethods = {
      |                                ^~~~~~~~~~~~~~~~~~~~~~~
columnar_customscan.c:162:32: warning: no previous declaration for ‘ColumnarScanExecuteMethods’ [-Wmissing-variable-declarations]
  162 | const struct CustomExecMethods ColumnarScanExecuteMethods = {
      |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~
columnar_customscan.c: In function ‘EvalParamsMutator’:
columnar_customscan.c:1775:40: error: implicit declaration of function ‘ExecInitExprWithParams’ [-Wimplicit-function-declaration]
 1775 |                 ExprState *exprState = ExecInitExprWithParams((Expr *) node,
      |                                        ^~~~~~~~~~~~~~~~~~~~~~
columnar_customscan.c:1775:40: error: initialization of ‘ExprState *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
columnar_customscan.c:1777:30: error: implicit declaration of function ‘ExecEvalExpr’ [-Wimplicit-function-declaration]
 1777 |                 Datum pval = ExecEvalExpr(exprState, econtext, &isnull);
      |                              ^~~~~~~~~~~~
columnar_customscan.c: In function ‘ColumnarScan_BeginCustomScan’:
columnar_customscan.c:1803:9: error: implicit declaration of function ‘ExecAssignExprContext’ [-Wimplicit-function-declaration]
 1803 |         ExecAssignExprContext(estate, &cscanstate->ss.ps);
      |         ^~~~~~~~~~~~~~~~~~~~~
columnar_customscan.c:1807:9: error: implicit declaration of function ‘ResetExprContext’ [-Wimplicit-function-declaration]
 1807 |         ResetExprContext(columnarScanState->css_RuntimeContext);
      |         ^~~~~~~~~~~~~~~~
columnar_customscan.c: In function ‘ColumnarScan_ExecCustomScan’:
columnar_customscan.c:1919:16: error: implicit declaration of function ‘ExecScan’ [-Wimplicit-function-declaration]
 1919 |         return ExecScan(&node->ss,
      |                ^~~~~~~~
columnar_customscan.c:1920:42: error: ‘ExecScanAccessMtd’ undeclared (first use in this function)
 1920 |                                         (ExecScanAccessMtd) ColumnarScanNext,
      |                                          ^~~~~~~~~~~~~~~~~
columnar_customscan.c:1920:42: note: each undeclared identifier is reported only once for each function it appears in
columnar_customscan.c:1920:60: error: expected ‘)’ before ‘ColumnarScanNext’
 1920 |                                         (ExecScanAccessMtd) ColumnarScanNext,
      |                                                            ^~~~~~~~~~~~~~~~~
      |                                                            )
columnar_customscan.c:1919:24: note: to match this ‘(’
 1919 |         return ExecScan(&node->ss,
      |                        ^
columnar_customscan.c: In function ‘ColumnarScan_ExplainCustomScan’:
columnar_customscan.c:1987:9: error: implicit declaration of function ‘ExplainPropertyText’ [-Wimplicit-function-declaration]
 1987 |         ExplainPropertyText("Columnar Projected Columns",
      |         ^~~~~~~~~~~~~~~~~~~
columnar_customscan.c:2003:25: error: implicit declaration of function ‘ExplainPropertyInteger’ [-Wimplicit-function-declaration]
 2003 |                         ExplainPropertyInteger(
      |                         ^~~~~~~~~~~~~~~~~~~~~~
columnar_customscan.c: At top level:
columnar_customscan.c:1910:1: warning: ‘ColumnarScanRecheck’ defined but not used [-Wunused-function]
 1910 | ColumnarScanRecheck(ColumnarScanState *node, TupleTableSlot *slot)
      | ^~~~~~~~~~~~~~~~~~~
columnar_customscan.c:1864:1: warning: ‘ColumnarScanNext’ defined but not used [-Wunused-function]
 1864 | ColumnarScanNext(ColumnarScanState *columnarScanState)
      | ^~~~~~~~~~~~~~~~
make[1]: *** [<builtin>: columnar_customscan.o] Error 1

devrimgunduz avatar Jun 22 '25 11:06 devrimgunduz

We’re actively working on this. We’ve successfully built against 18beta1, and we’re now focused on resolving the regression test failures.

PR for build: https://github.com/citusdata/citus/pull/7981

Issue page related to regress test: https://github.com/citusdata/citus/issues/7992

m3hm3t avatar Jun 23 '25 09:06 m3hm3t

18beta2 support added to main branch.

m3hm3t avatar Jul 23 '25 12:07 m3hm3t

Closing this issue for now, but it can be reopened if needed.

m3hm3t avatar Aug 20 '25 21:08 m3hm3t

I have to keep this open until you folks release a tarball/release with v18 support.

devrimgunduz avatar Aug 21 '25 01:08 devrimgunduz

Just a heads-up: PostgreSQL 18 RC1 will be out this Thursday (4 September). GA is currently planned at 25 September

devrimgunduz avatar Sep 02 '25 08:09 devrimgunduz

is this released?

tarunanand-dev avatar Oct 07 '25 09:10 tarunanand-dev