Advertisement
Guest User

Untitled

a guest
Nov 12th, 2016
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.75 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. # Export all table schemas and functions into individual *.sql files for easy management and source control.
  4.  
  5. TEMP_WORK_PATH="/tmp/postgres"
  6. BACKUP_ROOT_PATH="/vagrant/backup"
  7. DATABASE_NAME="myapp_db"
  8. DATABASE_TABLES_PREFIX="myapp_"
  9. POSTGRES_USER="postgres"
  10. POSTGRES_PASSWORD="postgres"
  11.  
  12.  
  13. [ -d $TEMP_WORK_PATH ] || mkdir -p $TEMP_WORK_PATH
  14. rm -rf $TEMP_WORK_PATH/*
  15.  
  16. [ -d $BACKUP_ROOT_PATH ] || mkdir -p $BACKUP_ROOT_PATH
  17. rm -rf $BACKUP_ROOT_PATH/*
  18.  
  19. mkdir $BACKUP_ROOT_PATH/tables
  20. mkdir $BACKUP_ROOT_PATH/routines
  21.  
  22. export PGPASSWORD=$POSTGRES_PASSWORD
  23.  
  24. cd $TEMP_WORK_PATH
  25.  
  26. # Get all table schemas and write to individual files
  27. echo "Export table schemas..."
  28. for table in $(psql -U $POSTGRES_USER -d $DATABASE_NAME -t -c "Select table_name From information_schema.tables Where table_type='BASE TABLE' and table_name like '$DATABASE_TABLES_PREFIX%'");
  29. do pg_dump -st $table -U $POSTGRES_USER $DATABASE_NAME > $BACKUP_ROOT_PATH/tables/$table.sql;
  30. done;
  31.  
  32. # Get all functions in db and output to one file
  33. echo "Getting stored functions..."
  34. psql -U $POSTGRES_USER -At $DATABASE_NAME > $TEMP_WORK_PATH/db_functions.sql <<EOF
  35. SELECT pg_get_functiondef(f.oid)
  36. FROM pg_catalog.pg_proc f
  37. INNER JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid)
  38. WHERE n.nspname = 'public';
  39. EOF
  40.  
  41. # Split function file into separate files per function
  42. echo "Exporting stored functions..."
  43. csplit -f function -b '%d.sql' db_functions.sql '/FUNCTION/' '{*}'
  44.  
  45. # Rename the function files to match the function name in the file
  46. counter=1
  47. while [ -f $TEMP_WORK_PATH/function$counter.sql ]
  48. do
  49. name=$(head -1 function$counter.sql | awk {'print $5'})
  50. name=$(echo $name | cut -d "." --f 2 | cut -d "(" --f 1)
  51. mv function$counter.sql $BACKUP_ROOT_PATH/routines/$name.sql
  52. counter=$((counter+1))
  53. done
  54.  
  55. echo "done"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement