From 3ca189ce089729e71e5aee6e44f68c03f72b26d0 Mon Sep 17 00:00:00 2001 From: Jason Petersen Date: Wed, 19 Apr 2017 23:36:30 -0600 Subject: [PATCH] Use new sequence struct field names Bizarrely, PostgreSQL 10 renames all of Form_pg_sequence's fields. --- src/backend/distributed/utils/citus_ruleutils.c | 8 ++++++++ .../distributed/worker/worker_data_fetch_protocol.c | 10 +++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/backend/distributed/utils/citus_ruleutils.c b/src/backend/distributed/utils/citus_ruleutils.c index 63501a060..36aa3e9a6 100644 --- a/src/backend/distributed/utils/citus_ruleutils.c +++ b/src/backend/distributed/utils/citus_ruleutils.c @@ -193,10 +193,18 @@ pg_get_sequencedef_string(Oid sequenceRelationId) /* build our DDL command */ qualifiedSequenceName = generate_relation_name(sequenceRelationId, NIL); + +#if (PG_VERSION_NUM >= 100000) + sequenceDef = psprintf(CREATE_SEQUENCE_COMMAND, qualifiedSequenceName, + pgSequenceForm->seqincrement, pgSequenceForm->seqmin, + pgSequenceForm->seqmax, pgSequenceForm->seqstart, + pgSequenceForm->seqcycle ? "" : "NO "); +#else sequenceDef = psprintf(CREATE_SEQUENCE_COMMAND, qualifiedSequenceName, pgSequenceForm->increment_by, pgSequenceForm->min_value, pgSequenceForm->max_value, pgSequenceForm->start_value, pgSequenceForm->is_cycled ? "" : "NO "); +#endif return sequenceDef; } diff --git a/src/backend/distributed/worker/worker_data_fetch_protocol.c b/src/backend/distributed/worker/worker_data_fetch_protocol.c index 3ceb1ae69..80b067659 100644 --- a/src/backend/distributed/worker/worker_data_fetch_protocol.c +++ b/src/backend/distributed/worker/worker_data_fetch_protocol.c @@ -1355,6 +1355,14 @@ AlterSequenceMinMax(Oid sequenceId, char *schemaName, char *sequenceName) Form_pg_sequence sequenceData = pg_get_sequencedef(sequenceId); int64 startValue = 0; int64 maxValue = 0; +#if (PG_VERSION_NUM >= 100000) + int64 sequenceMaxValue = sequenceData->seqmax; + int64 sequenceMinValue = sequenceData->seqmin; +#else + int64 sequenceMaxValue = sequenceData->max_value; + int64 sequenceMinValue = sequenceData->min_value; +#endif + /* calculate min/max values that the sequence can generate in this worker */ startValue = (((int64) GetLocalGroupId()) << 48) + 1; @@ -1365,7 +1373,7 @@ AlterSequenceMinMax(Oid sequenceId, char *schemaName, char *sequenceName) * their correct values. This happens when the sequence has been created * during shard, before the current worker having the metadata. */ - if (sequenceData->min_value != startValue || sequenceData->max_value != maxValue) + if (sequenceMinValue != startValue || sequenceMaxValue != maxValue) { StringInfo startNumericString = makeStringInfo(); StringInfo maxNumericString = makeStringInfo();