mirror of https://github.com/citusdata/citus.git
Fix CREATE EXTENSION propagation with custom version
parent
7559ad12ba
commit
8e43c8094d
|
@ -769,13 +769,23 @@ RecreateExtensionStmt(Oid extensionOid)
|
||||||
|
|
||||||
/* make DefEleme for extensionSchemaName */
|
/* make DefEleme for extensionSchemaName */
|
||||||
Node *schemaNameArg = (Node *) makeString(extensionSchemaName);
|
Node *schemaNameArg = (Node *) makeString(extensionSchemaName);
|
||||||
|
|
||||||
DefElem *schemaDefElement = makeDefElem("schema", schemaNameArg, location);
|
DefElem *schemaDefElement = makeDefElem("schema", schemaNameArg, location);
|
||||||
|
|
||||||
/* append the schema name DefElem finally */
|
/* append the schema name DefElem finally */
|
||||||
createExtensionStmt->options = lappend(createExtensionStmt->options,
|
createExtensionStmt->options = lappend(createExtensionStmt->options,
|
||||||
schemaDefElement);
|
schemaDefElement);
|
||||||
|
|
||||||
|
char *extensionVersion = get_extension_version(extensionOid);
|
||||||
|
if (extensionVersion != NULL)
|
||||||
|
{
|
||||||
|
Node *extensionVersionArg = (Node *) makeString(extensionVersion);
|
||||||
|
DefElem *extensionVersionElement =
|
||||||
|
makeDefElem("new_version", extensionVersionArg, location);
|
||||||
|
|
||||||
|
createExtensionStmt->options = lappend(createExtensionStmt->options,
|
||||||
|
extensionVersionElement);
|
||||||
|
}
|
||||||
|
|
||||||
return (Node *) createExtensionStmt;
|
return (Node *) createExtensionStmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -123,6 +123,48 @@ pg_get_extensiondef_string(Oid tableRelationId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* get_extension_version - given an extension OID, fetch its extversion
|
||||||
|
* or NULL if not found.
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
get_extension_version(Oid extensionId)
|
||||||
|
{
|
||||||
|
char *versionName = NULL;
|
||||||
|
|
||||||
|
Relation relation = table_open(ExtensionRelationId, AccessShareLock);
|
||||||
|
|
||||||
|
ScanKeyData entry[1];
|
||||||
|
ScanKeyInit(&entry[0],
|
||||||
|
Anum_pg_extension_oid,
|
||||||
|
BTEqualStrategyNumber, F_OIDEQ,
|
||||||
|
ObjectIdGetDatum(extensionId));
|
||||||
|
|
||||||
|
SysScanDesc scanDesc = systable_beginscan(relation, ExtensionOidIndexId, true,
|
||||||
|
NULL, 1, entry);
|
||||||
|
|
||||||
|
HeapTuple tuple = systable_getnext(scanDesc);
|
||||||
|
|
||||||
|
/* We assume that there can be at most one matching tuple */
|
||||||
|
if (HeapTupleIsValid(tuple))
|
||||||
|
{
|
||||||
|
bool isNull = false;
|
||||||
|
Datum versionDatum = heap_getattr(tuple, Anum_pg_extension_extversion,
|
||||||
|
RelationGetDescr(relation), &isNull);
|
||||||
|
if (!isNull)
|
||||||
|
{
|
||||||
|
versionName = text_to_cstring(DatumGetTextPP(versionDatum));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
systable_endscan(scanDesc);
|
||||||
|
|
||||||
|
table_close(relation, AccessShareLock);
|
||||||
|
|
||||||
|
return versionName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* get_extension_schema - given an extension OID, fetch its extnamespace
|
* get_extension_schema - given an extension OID, fetch its extnamespace
|
||||||
*
|
*
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
/* Function declarations for version independent Citus ruleutils wrapper functions */
|
/* Function declarations for version independent Citus ruleutils wrapper functions */
|
||||||
extern char * pg_get_extensiondef_string(Oid tableRelationId);
|
extern char * pg_get_extensiondef_string(Oid tableRelationId);
|
||||||
extern Oid get_extension_schema(Oid ext_oid);
|
extern Oid get_extension_schema(Oid ext_oid);
|
||||||
|
extern char * get_extension_version(Oid extensionId);
|
||||||
extern char * pg_get_serverdef_string(Oid tableRelationId);
|
extern char * pg_get_serverdef_string(Oid tableRelationId);
|
||||||
extern char * pg_get_sequencedef_string(Oid sequenceRelid);
|
extern char * pg_get_sequencedef_string(Oid sequenceRelid);
|
||||||
extern Form_pg_sequence pg_get_sequencedef(Oid sequenceRelationId);
|
extern Form_pg_sequence pg_get_sequencedef(Oid sequenceRelationId);
|
||||||
|
|
|
@ -506,7 +506,7 @@ run_command_on_workers
|
||||||
|
|
||||||
run_command_on_workers
|
run_command_on_workers
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
(localhost,57637,t,1.3)
|
(localhost,57637,t,1.1)
|
||||||
(localhost,57638,t,1.1)
|
(localhost,57638,t,1.1)
|
||||||
(2 rows)
|
(2 rows)
|
||||||
|
|
||||||
|
@ -589,7 +589,7 @@ run_command_on_workers
|
||||||
|
|
||||||
run_command_on_workers
|
run_command_on_workers
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
(localhost,57637,t,1.3)
|
(localhost,57637,t,1.1)
|
||||||
(localhost,57638,t,1.2)
|
(localhost,57638,t,1.2)
|
||||||
(2 rows)
|
(2 rows)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue