aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bin/scripts/clusterdb38
1 files changed, 24 insertions, 14 deletions
diff --git a/src/bin/scripts/clusterdb b/src/bin/scripts/clusterdb
index 33d5967dde1..dd3021ae7b6 100644
--- a/src/bin/scripts/clusterdb
+++ b/src/bin/scripts/clusterdb
@@ -11,7 +11,7 @@
#
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/bin/scripts/Attic/clusterdb,v 1.2 2002/09/07 16:12:27 petere Exp $
+# $Header: /cvsroot/pgsql/src/bin/scripts/Attic/clusterdb,v 1.3 2002/09/12 00:18:14 momjian Exp $
#
#-------------------------------------------------------------------------
@@ -121,7 +121,7 @@ if [ "$usage" ]; then
echo " -W, --password Prompt for password"
echo " -d, --dbname=DBNAME Database to cluster"
echo " -a, --all Cluster all databases"
- echo " -t, --table='TABLE[(columns)]' Cluster specific table only"
+ echo " -t, --table='TABLE' Cluster specific table only"
echo " -v, --verbose Write a lot of output"
echo " -e, --echo Show the command being sent to the backend"
echo " -q, --quiet Don't write any output"
@@ -152,25 +152,35 @@ fi
for db in $dbname
do
- [ "$alldb" -a "$quiet" -ne 1 ] && echo "Clustering $db"
- query="SELECT pg_class.relname, pg_class_2.relname FROM pg_class, \
- pg_class AS pg_class_2, pg_index WHERE pg_class.oid=pg_index.indrelid\
- AND pg_class_2.oid=pg_index.indexrelid AND pg_index.indisclustered"
+ [ "$alldb" ] && echo "Clustering $db"
+ query="SELECT nspname, pg_class.relname, pg_class_2.relname FROM pg_class, pg_class AS pg_class_2 JOIN pg_namespace ON (pg_namespace.oid=relnamespace), pg_index WHERE pg_class.oid=pg_index.indrelid AND pg_class_2.oid=pg_index.indexrelid AND pg_index.indisclustered"
if [ -z "$table" ]; then
tables=`${PATHNAME}psql $db $PSQLOPT -F: -P format=unaligned -t -c "$query"`
else
- tables=`${PATHNAME}psql $db $PSQLOPT -F: -P format=unaligned -t -c \
- "$query AND pg_class.relname='$table'"`
+ # if tablename has a dot, use it as namespace separator
+ if echo $table | grep -s '\.' 2>&1 >/dev/null
+ then
+ tbl=`echo $table | cut -d. -f2`
+ nspc=`echo $table | cut -d. -f1`
+ tables=`${PATHNAME}psql $db $PSQLOPT -F: -P format=unaligned -t -c "$query AND pg_class.relname='$tbl' AND nspname='$nspc'"`
+ echo $tables
+ else
+ tables=`${PATHNAME}psql $db $PSQLOPT -F: -P format=unaligned -t -c "$query AND pg_class.relname='$table'"`
+ fi
fi
+ query=
for tabs in $tables
do
- tab=`echo $tabs | cut -d: -f1`
- idx=`echo $tabs | cut -d: -f2`
- ${PATHNAME}psql $PSQLOPT $ECHOOPT -c "CLUSTER $idx on $tab" -d $db
- if [ "$?" -ne 0 ]; then
- echo "$CMDNAME: cluster $table $db failed" 1>&2
- fi
+ nspc=`echo $tabs | cut -d: -f1`
+ tab=`echo $tabs | cut -d: -f2`
+ idx=`echo $tabs | cut -d: -f3`
+ query="$query CLUSTER $idx ON $nspc.$tab;"
done
+ ${PATHNAME}psql $PSQLOPT $ECHOOPT -c "$query" -d $db
+ if [ "$?" -ne 0 ]
+ then
+ echo "$CMDNAME: While clustering $db, the following failed: $query" 1>&2
+ fi
done
exit 0