0002-partial-fix-collation-version-dependencies.patch
text/x-diff
Filename: 0002-partial-fix-collation-version-dependencies.patch
Type: text/x-diff
Part: 1
Patch
Format: unified
Series: patch 0002
| File | + | − |
|---|---|---|
| src/backend/catalog/pg_depend.c | 8 | 7 |
diff --git a/src/backend/catalog/pg_depend.c b/src/backend/catalog/pg_depend.c
index 362db7fe91..174ce4b7df 100644
--- a/src/backend/catalog/pg_depend.c
+++ b/src/backend/catalog/pg_depend.c
@@ -73,7 +73,6 @@ recordMultipleDependencies(const ObjectAddress *depender,
max_slots,
slot_init_count,
slot_stored_count;
- char *version = NULL;
if (nreferenced <= 0)
return; /* nothing to do */
@@ -104,6 +103,7 @@ recordMultipleDependencies(const ObjectAddress *depender,
slot_init_count = 0;
for (i = 0; i < nreferenced; i++, referenced++)
{
+ char *version = NULL;
bool ignore_systempin = false;
if (record_version)
@@ -111,7 +111,7 @@ recordMultipleDependencies(const ObjectAddress *depender,
/* For now we only know how to deal with collations. */
if (referenced->classId == CollationRelationId)
{
- /* C and POSIX don't need version tracking. */
+ /* These are unversioned, so don't waste cycles on them. */
if (referenced->objectId == C_COLLATION_OID ||
referenced->objectId == POSIX_COLLATION_OID)
continue;
@@ -120,15 +120,16 @@ recordMultipleDependencies(const ObjectAddress *depender,
false);
/*
- * Default collation is pinned, so we need to force recording
- * the dependency to store the version.
+ * If we have a version, make sure we record it even if the
+ * collation is pinned. Also force recording a dependency on
+ * the "default" collation even if it hasn't got a version;
+ * this is an ugly kluge to ensure stability of regression
+ * test results.
*/
- if (referenced->objectId == DEFAULT_COLLATION_OID)
+ if (version || referenced->objectId == DEFAULT_COLLATION_OID)
ignore_systempin = true;
}
}
- else
- Assert(!version);
/*
* If the referenced object is pinned by the system, there's no real