blob: 7477e6430a10cabb5653d677b15fb5248a4f9b17 [file] [log] [blame]
#!/bin/sh
#
# unused_oids
#
# $PostgreSQL: pgsql/src/include/catalog/unused_oids,v 1.8 2006/07/31 01:16:38 tgl Exp $
#
# finds blocks of manually-assignable oids that have not already been
# claimed by post_hackers. primarily useful for finding available
# oids for new internal functions. the numbers printed are inclusive
# ranges of unused oids.
#
# before using a large empty block, make sure you aren't about
# to take over what was intended as expansion space for something
# else.
#
# run this script in src/include/catalog.
#
AWK="awk"
# Get FirstBootstrapObjectId from access/transam.h
FIRSTOBJECTID=`grep '#define[ ]*FirstBootstrapObjectId' ./pg_magic_oid.h | $AWK '{ print $3 }'`
export FIRSTOBJECTID
# This value splits the OID range into two so that GPDB and GPSQL can add
# new built-in objects in parallel.
LOWESTGPSQLOID=`grep '#define[ ]*LowestGPSQLBootstrapObjectId' ./pg_magic_oid.h | $AWK '{ print $3 }'`
export LOWESTGPSQLOID
# this part (down to the uniq step) should match the duplicate_oids script
# note: we exclude BKI_BOOTSTRAP relations since they are expected to have
# matching DATA lines in pg_class.h
cat pg_*.h gp_*.h toasting.h indexing.h | \
egrep -v -e '^CATALOG\(.*BKI_BOOTSTRAP' | \
sed -n -e 's/^DATA(insert *OID *= *\([0-9][0-9]*\).*$/\1/p' \
-e 's/^CATALOG([^,]*, *\([0-9][0-9]*\).*$/\1/p' \
-e 's/^DECLARE_INDEX([^,]*, *\([0-9][0-9]*\).*$/\1/p' \
-e 's/^DECLARE_UNIQUE_INDEX([^,]*, *\([0-9][0-9]*\).*$/\1/p' \
-e 's/^DECLARE_TOAST([^,]*, *\([0-9][0-9]*\), *\([0-9][0-9]*\).*$/\1,\2/p' | \
tr ',' '\n' | \
sort -n | \
uniq | \
$AWK '
BEGIN {
last = ENVIRON["LOWESTGPSQLOID"] - 1
}
/^[0-9]/ {
if ($1 > last + 1) {
if ($1 > last + 2) {
print last + 1, "-", $1 - 1;
} else {
print last + 1;
}
}
if ($1 >= last){
last = $1;
}
}
END {
if (last + 1 != ENVIRON["FIRSTOBJECTID"]) {
print last + 1, "-", ENVIRON["FIRSTOBJECTID"]-1;
}
}'