#!/bin/bash

if [ $# -lt 1 ]; then
  echo
  echo "Usage: $0 DB_NAME NUM_THREADS"
  echo
  exit 1
fi

sDBName=$1
nThreads=$2

if [ ! -n tablist.txt ]; then
  echo
  echo "Error: Please create a file named 'tablist.txt' that"
  echo "       contains the list of tables to reindex."
  echo
  exit 1
fi

if [ -f index_rebuild_1.sql ]; then
  rm index_rebuild_*.sql
fi

for (( i=1 ; $i < $nThreads + 1; i=$i+1 )); do
  echo "\timing" > index_rebuild_${i}.sql
done

sTabList=''
for x in $(cat tablist.txt); do
  sTabList="${sTabList}, '$x'"
done
sTabList=${sTabList:2}

let i=1
for sIndex in $(psql -Atc "
      SELECT n.nspname || '.\"' || i.relname || '\"'
        FROM pg_index x
        JOIN pg_class c ON c.oid = x.indrelid
        JOIN pg_class i ON i.oid = x.indexrelid
        LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
        LEFT JOIN pg_tablespace t ON t.oid = i.reltablespace
       WHERE c.relkind = 'r' AND i.relkind = 'i'
         AND c.relname IN ($sTabList)
       ORDER BY c.reltuples,c.relname" $sDBName)
do
  let nThread=$i%nThreads+1

  echo "REINDEX INDEX $sIndex;" >> index_rebuild_${nThread}.sql

  let i=$i+1
done