/pgpatches/pg_enum
text/x-diff
Filename: /pgpatches/pg_enum
Type: text/x-diff
Part: 0
Message:
Re: Removing pg_migrator limitations
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: context
| File | + | − |
|---|---|---|
| src/backend/catalog/pg_enum.c | 24 | 12 |
Index: src/backend/catalog/pg_enum.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/catalog/pg_enum.c,v
retrieving revision 1.11
diff -c -c -r1.11 pg_enum.c
*** src/backend/catalog/pg_enum.c 24 Dec 2009 22:17:58 -0000 1.11
--- src/backend/catalog/pg_enum.c 24 Dec 2009 22:29:17 -0000
***************
*** 25,30 ****
--- 25,32 ----
static int oid_cmp(const void *p1, const void *p2);
+ Oid binary_upgrade_next_pg_enum_oid = InvalidOid;
+
/*
* EnumValuesCreate
***************
*** 58,82 ****
tupDesc = pg_enum->rd_att;
/*
! * Allocate oids. While this method does not absolutely guarantee that we
! * generate no duplicate oids (since we haven't entered each oid into the
! * table before allocating the next), trouble could only occur if the oid
! * counter wraps all the way around before we finish. Which seems
! * unlikely.
*/
oids = (Oid *) palloc(num_elems * sizeof(Oid));
! for (elemno = 0; elemno < num_elems; elemno++)
{
/*
! * The pg_enum.oid is stored in user tables. This oid must be
! * preserved by binary upgrades.
*/
! oids[elemno] = GetNewOid(pg_enum);
}
- /* sort them, just in case counter wrapped from high to low */
- qsort(oids, num_elems, sizeof(Oid), oid_cmp);
-
/* and make the entries */
memset(nulls, false, sizeof(nulls));
--- 60,94 ----
tupDesc = pg_enum->rd_att;
/*
! * Allocate oids
*/
oids = (Oid *) palloc(num_elems * sizeof(Oid));
! if (num_elems == 1 && OidIsValid(binary_upgrade_next_pg_enum_oid))
! {
! oids[0] = binary_upgrade_next_pg_enum_oid;
! binary_upgrade_next_pg_enum_oid = InvalidOid;
! }
! else
{
/*
! * While this method does not absolutely guarantee that we generate
! * no duplicate oids (since we haven't entered each oid into the
! * table before allocating the next), trouble could only occur if
! * the oid counter wraps all the way around before we finish. Which
! * seems unlikely.
*/
! for (elemno = 0; elemno < num_elems; elemno++)
! {
! /*
! * The pg_enum.oid is stored in user tables. This oid must be
! * preserved by binary upgrades.
! */
! oids[elemno] = GetNewOid(pg_enum);
! }
! /* sort them, just in case counter wrapped from high to low */
! qsort(oids, num_elems, sizeof(Oid), oid_cmp);
}
/* and make the entries */
memset(nulls, false, sizeof(nulls));