mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-24 23:34:25 +08:00
Adjust code to CLUSTER and REINDEX refactoring
PG14 refactors CLUSTER and REINDEX option handling. https://github.com/postgres/postgres/commit/b5913f6120 https://github.com/postgres/postgres/commit/a3dc926009
This commit is contained in:
parent
dae4a904ea
commit
044441e02a
@ -7,6 +7,7 @@
|
|||||||
#define TIMESCALEDB_COMPAT_H
|
#define TIMESCALEDB_COMPAT_H
|
||||||
|
|
||||||
#include <postgres.h>
|
#include <postgres.h>
|
||||||
|
#include <commands/cluster.h>
|
||||||
#include <commands/explain.h>
|
#include <commands/explain.h>
|
||||||
#include <commands/trigger.h>
|
#include <commands/trigger.h>
|
||||||
#include <executor/executor.h>
|
#include <executor/executor.h>
|
||||||
@ -206,6 +207,69 @@ get_vacuum_options(const VacuumStmt *stmt)
|
|||||||
(analyze ? VACOPT_ANALYZE : 0);
|
(analyze ? VACOPT_ANALYZE : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if PG14_LT
|
||||||
|
static inline int
|
||||||
|
get_cluster_options(const ClusterStmt *stmt)
|
||||||
|
{
|
||||||
|
return stmt->options;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline ClusterParams *
|
||||||
|
get_cluster_options(const ClusterStmt *stmt)
|
||||||
|
{
|
||||||
|
ListCell *lc;
|
||||||
|
ClusterParams *params = palloc0(sizeof(ClusterParams));
|
||||||
|
bool verbose = false;
|
||||||
|
|
||||||
|
/* Parse option list */
|
||||||
|
foreach (lc, stmt->params)
|
||||||
|
{
|
||||||
|
DefElem *opt = (DefElem *) lfirst(lc);
|
||||||
|
if (strcmp(opt->defname, "verbose") == 0)
|
||||||
|
verbose = defGetBoolean(opt);
|
||||||
|
else
|
||||||
|
ereport(ERROR,
|
||||||
|
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||||
|
errmsg("unrecognized CLUSTER option \"%s\"", opt->defname),
|
||||||
|
parser_errposition(NULL, opt->location)));
|
||||||
|
}
|
||||||
|
|
||||||
|
params->options = (verbose ? CLUOPT_VERBOSE : 0);
|
||||||
|
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <catalog/index.h>
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
get_reindex_options(ReindexStmt *stmt)
|
||||||
|
{
|
||||||
|
#if PG14_LT
|
||||||
|
return stmt->options;
|
||||||
|
#else
|
||||||
|
ListCell *lc;
|
||||||
|
bool concurrently = false;
|
||||||
|
bool verbose = false;
|
||||||
|
|
||||||
|
/* Parse option list */
|
||||||
|
foreach (lc, stmt->params)
|
||||||
|
{
|
||||||
|
DefElem *opt = (DefElem *) lfirst(lc);
|
||||||
|
if (strcmp(opt->defname, "verbose") == 0)
|
||||||
|
verbose = defGetBoolean(opt);
|
||||||
|
else if (strcmp(opt->defname, "concurrently") == 0)
|
||||||
|
concurrently = defGetBoolean(opt);
|
||||||
|
else
|
||||||
|
ereport(ERROR,
|
||||||
|
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||||
|
errmsg("unrecognized REINDEX option \"%s\"", opt->defname),
|
||||||
|
parser_errposition(NULL, opt->location)));
|
||||||
|
}
|
||||||
|
return (verbose ? REINDEXOPT_VERBOSE : 0) | (concurrently ? REINDEXOPT_CONCURRENTLY : 0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* PG14 splits Copy code into separate code for COPY FROM and COPY TO
|
/* PG14 splits Copy code into separate code for COPY FROM and COPY TO
|
||||||
* since we were only interested in the COPY FROM parts we macro CopyFromState
|
* since we were only interested in the COPY FROM parts we macro CopyFromState
|
||||||
* to CopyState for versions < 14
|
* to CopyState for versions < 14
|
||||||
|
@ -1488,16 +1488,14 @@ reindex_chunk(Hypertable *ht, Oid chunk_relid, void *arg)
|
|||||||
case REINDEX_OBJECT_TABLE:
|
case REINDEX_OBJECT_TABLE:
|
||||||
stmt->relation->relname = NameStr(chunk->fd.table_name);
|
stmt->relation->relname = NameStr(chunk->fd.table_name);
|
||||||
stmt->relation->schemaname = NameStr(chunk->fd.schema_name);
|
stmt->relation->schemaname = NameStr(chunk->fd.schema_name);
|
||||||
ReindexTable(stmt->relation,
|
|
||||||
stmt->options
|
|
||||||
#if PG14_LT
|
#if PG14_LT
|
||||||
,
|
ReindexTable(stmt->relation,
|
||||||
|
get_reindex_options(stmt),
|
||||||
stmt->concurrent /* should test for deadlocks */
|
stmt->concurrent /* should test for deadlocks */
|
||||||
#elif PG14_GE
|
|
||||||
,
|
|
||||||
false /* isTopLevel */
|
|
||||||
#endif
|
|
||||||
);
|
);
|
||||||
|
#elif PG14_GE
|
||||||
|
ExecReindex(NULL, stmt, false);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case REINDEX_OBJECT_INDEX:
|
case REINDEX_OBJECT_INDEX:
|
||||||
/* Not supported, a.t.m. See note in process_reindex(). */
|
/* Not supported, a.t.m. See note in process_reindex(). */
|
||||||
@ -1543,7 +1541,7 @@ process_reindex(ProcessUtilityArgs *args)
|
|||||||
#if PG14_LT
|
#if PG14_LT
|
||||||
if (stmt->concurrent)
|
if (stmt->concurrent)
|
||||||
#else
|
#else
|
||||||
if (stmt->options & REINDEXOPT_CONCURRENTLY)
|
if (get_reindex_options(stmt) & REINDEXOPT_CONCURRENTLY)
|
||||||
#endif
|
#endif
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errmsg("concurrent index creation on hypertables is not supported")));
|
(errmsg("concurrent index creation on hypertables is not supported")));
|
||||||
@ -2645,14 +2643,7 @@ process_cluster_start(ProcessUtilityArgs *args)
|
|||||||
* Since we keep OIDs between transactions, there is a potential
|
* Since we keep OIDs between transactions, there is a potential
|
||||||
* issue if an OID gets reassigned between two subtransactions
|
* issue if an OID gets reassigned between two subtransactions
|
||||||
*/
|
*/
|
||||||
cluster_rel(cim->chunkoid,
|
cluster_rel(cim->chunkoid, cim->indexoid, get_cluster_options(stmt));
|
||||||
cim->indexoid,
|
|
||||||
stmt->options
|
|
||||||
#if PG14_GE
|
|
||||||
,
|
|
||||||
args->context == PROCESS_UTILITY_TOPLEVEL
|
|
||||||
#endif
|
|
||||||
);
|
|
||||||
PopActiveSnapshot();
|
PopActiveSnapshot();
|
||||||
CommitTransactionCommand();
|
CommitTransactionCommand();
|
||||||
}
|
}
|
||||||
|
@ -717,9 +717,6 @@ copy_heap_data(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex, bool verbose,
|
|||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
#if PG14_GE
|
|
||||||
true,
|
|
||||||
#endif
|
|
||||||
&OldestXmin,
|
&OldestXmin,
|
||||||
&FreezeXid,
|
&FreezeXid,
|
||||||
NULL,
|
NULL,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user