pg_upgrade
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:2k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. #!/bin/sh
  2. #
  3. # pg_upgrade: update a database without needing a full dump/reload cycle
  4. # CAUTION: read the manual page before trying to use this!
  5. echo "pg_upgrade is disabled in this release because the on-disk structure" 1>&2
  6. echo "of the tables has changed compared to previous releases." 1>&2
  7. exit 1
  8. trap "rm -f /tmp/$$" 0 1 2 3 15
  9. if [ "$#" -eq 0 ]
  10. then echo "Usage:  $0 [-f inputfile] old_data_dir" 1>&2
  11. exit 1
  12. fi
  13. if [ "X$1" = "X-f" ]
  14. then INPUT="$2"
  15. shift 2
  16. if [ ! -f "$INPUT" ]
  17. then echo "$INPUT does not exist" 1>&2
  18. exit 1
  19. fi
  20. else INPUT=""
  21. fi
  22. if [ "$#" -ne 1 ]
  23. then echo "Usage:  $0 [-f inputfile] old_data_dir" 1>&2
  24. exit 1
  25. fi
  26. OLDDIR="$1"
  27. # check things
  28. if [ ! -f "./data/PG_VERSION" ]
  29. then echo "`basename $0` must be run from the directory containing
  30. the database directory `data' (`dirname $PGDATA`.)" 1>&2
  31. exit 1
  32. fi
  33. if [ ! -d "./$OLDDIR" ]
  34. then echo "You must rename your old /data directory to /$OLDDIR and run initdb." 1>&2
  35. exit 1
  36. fi
  37. if [ ! -d "./$OLDDIR/base/template1" ]
  38. then echo "There is not database template1 in ./$OLDDIR/base." 1>&2
  39. exit 1
  40. fi
  41. if [ ! -d "./data" ]
  42. then echo "You must run initdb to create the template1 database." 1>&2
  43. exit 1
  44. fi
  45. if [ ! -d "./data/base/template1" ]
  46. then echo "$0 must be run as the postgres superuser." 1>&2
  47. exit 1
  48. fi
  49. # do I need to create a database?
  50. # remove any COPY statements
  51. # we don't even need pgdump_oid because we are moving pg_variable
  52. # then shouldn't be in there anyway
  53. cat $INPUT | awk ' {
  54. if (toupper($1) == "COPY" && $2 != "pg_shadow")
  55. while (getline $0 > 0 && $0 != "\.")
  56. ;
  57. else print $0;
  58. }' >/tmp/$$
  59.  
  60. #create empty tables/indexes
  61. psql "template1" <"/tmp/$$"
  62. if [ $? -ne 0 ]
  63. then echo "There were errors in the input script $INPUT.
  64. $0 aborted." 1>&2
  65. exit 1
  66. fi
  67. for DIR in data/base/*
  68. do
  69. BASEDIR="`basename $DIR`"
  70. if [ -d "$DIR" -a 
  71.      -d "$OLDDIR/base/$BASEDIR" -a ( "$BASEDIR" != "template1" ) ]
  72. then for FILE in $OLDDIR/base/$BASEDIR/*
  73. do
  74. BASEFILE="`basename $FILE`"
  75. if [ `expr "$BASEFILE" : "pg_"` -ne 3 -a 
  76. "$BASEFILE" != "PG_VERSION" ]
  77. then mv $FILE $DIR
  78. fi
  79. done
  80. fi
  81. done
  82. mv $OLDDIR/pg_log data
  83. mv $OLDDIR/pg_variable data
  84. echo "You may remove the $OLDDIR directory with 'rm -r $OLDDIR'."