Guest User

Untitled

a guest
Feb 14th, 2019
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.98 KB | None | 0 0
  1. #!/usr/bin/env bash
  2. # Evan Wilde <etcwilde@uvic.ca>
  3. # July 20, 2017
  4.  
  5. # defaults
  6. user="postgres"
  7. passwd=""
  8. host="localhost"
  9. db="ghtorrent"
  10. tmpdir='/tmp'
  11.  
  12.  
  13. usage()
  14. {
  15. echo "Usage: $0 [-u dbuser ] [-p dbpasswd ] [-h dbhost ] [-d database] [-t tmpdir] dump_dir"
  16. echo
  17. echo "Restore a database from CSV and SQL files in dump_dir"
  18. echo " -u database user (default: $user)"
  19. echo " -p database passwd (default: $passwd)"
  20. echo " -h database host (default: $host)"
  21. echo " -d database to restore to. Must exist. (default: $db)"
  22. echo " -t temporary direcotry (should be at least 50 gb) (default: $tmpdir)"
  23. }
  24.  
  25. if [ -z $1 ]
  26. then
  27. usage
  28. exit 1
  29. fi
  30.  
  31. # Load arguments
  32. while getopts "u:p:h:d:t:" o
  33. do
  34. case $o in
  35. u) user=$OPTARG ;;
  36. p) passwd=$OPTARG ;;
  37. h) host=$OPTARG ;;
  38. d) db=$OPTARG ;;
  39. t) tmpdir=$OPTARG ;;
  40. \?) echo "Invalid option -$OPTARG" >&2
  41. usage
  42. exit 1
  43. ;;
  44. esac
  45. done
  46.  
  47. # Set up psql command line
  48. if [ -z $passwd ]; then
  49. psql="psql -q --dbname $db -U $user -h $host --no-password"
  50. else # should hide the password in the cmdline
  51. psql=" psql -q --dbname $db -U $user -h $host --password=$passwd"
  52. fi
  53.  
  54. shift $(expr $OPTIND - 1)
  55. dumpDir=$1
  56.  
  57. if [ ! -e $dumpDir/psql_schema.sql ]; then
  58. echo "Cannot find $dumpDir/psql_schema.sql to create DB schema"
  59. exit 1
  60. fi
  61.  
  62. if [ ! -e $dumpDir/ORDER ]; then
  63. echo "Cannot find $dumpDir/ORDER to build tables"
  64. exit 1
  65. fi
  66.  
  67. # 1. Create database schema
  68. echo "`date` Creating DB schema" >&2
  69. cat $dumpDir/psql_schema.sql |
  70. sed -e "/USE/d" |
  71. sed -e "/COMMENT/s/COMMENT '',/,/" |
  72. sed -e "/COMMENT/s/COMMENT '')/)/" |
  73. sed -e "/SET/d" |
  74. sed -e "/AUTO_INCREMENT/s/AUTO_INCREMENT/SERIAL/" |
  75. sed -E -e "s/ghtorrent\.(.*)/\1/" |
  76. sed -e "s/ghtorrent/$db/" |
  77. sed -E -e "s/DECIMAL\(([0-9]+,[0-9]+)\)/numeric(\1)/" |
  78. sed -e "/TINYINT/s/TINYINT([0-9]*)/int/" |
  79. sed -e "/INT/s/INT([0-9]*)/int/" |
  80. sed -e "/MEDIUMTEXT/s/MEDIUMTEXT/text/" |
  81. sed -e "/VARCHAR/s/VARCHAR([0-9]*)/text/" |
  82. grep -v "^--" | $psql
  83.  
  84. # 2. Disable FK and load data
  85. while read table; do
  86. file=`readlink -f "$dumpDir/$table.csv"`
  87. tmpf=`readlink -f $tmpdir`/$table.csv
  88. echo "`date` Restoring table $table" >&2
  89. echo "`date` Removing 0000-00-00 00:00:00 from timestamps ($tmpf)" >&2
  90. sed -e "s/\"0000-00-00 00:00:00\"/\\\N/g" $file> $tmpf
  91. mv $tmpf $file
  92. echo "`date` Disabling Foreign Key Constraints on $table" >&2
  93. echo "ALTER TABLE $table DISABLE TRIGGER ALL;" | $psql
  94. echo "\copy $table FROM '$file' WITH DELIMITER AS ',' NULL AS '\\N' ESCAPE '\\' CSV;" | $psql
  95. done < "`readlink -f $dumpDir/ORDER`"
  96.  
  97. # 3. Reenable FK constraints
  98. while read table; do
  99. echo "ALTER TABLE $table ENABLE TRIGGER ALL;" | $psql
  100. echo "`date` Reenabled Foreign Key Constraints on $table" >&2
  101. done < "`readlink -f $dumpDir/ORDER`"
  102.  
  103. # 4. Create Indices
  104. echo "`date` Creating Indices"
  105. cat $dumpDir/indexes.sql |
  106. sed -E -e "s/\`([^ \n\t\`]*)\`/\1/g" |
  107. sed -E -e "s/ghtorrent\.(.*)/\1/" |
  108. sed -e "/COMMENT/s/COMMENT '')/)/" |
  109. sed -e "/COMMENT/s/COMMENT '',/,/" |
  110. sed -e "/COMMENT/s/COMMENT '';/;/" | $psql
Add Comment
Please, Sign In to add comment