1010# or --combined which appends the data dump to the schema dump.
1111# The schema dump could not use -t to filter tables because this excludes extensions like postgis in the dump.
1212# pg_dump also does not add related tables automatically, so `dump_data.sh` does not add related data from accounts to the dump.
13+ #
14+ # with --csv a csv dump can be created for all tables in the given components. The csv files will be generated in the temporary directory csv_dumps
15+ # and combined into a single TAR archive csv_dumps.
1316
14-
15- set -e
17+ set -euo pipefail
1618
1719DEFAULT_APPS=(core)
1820
1921export PGHOST=${DB_HOST:- db}
2022export PGPORT=${DB_PORT:- 5432}
21- export PGUSER=${DB_USER:- objectypes }
22- export PGDATABASE=${DB_NAME:- objectypes }
23+ export PGUSER=${DB_USER:- objecttypes }
24+ export PGDATABASE=${DB_NAME:- objecttypes }
2325export PGPASSWORD=${DB_PASSWORD:- " " }
2426
2527SCRIPT=$( readlink -f " $0 " )
2628SCRIPTPATH=$( dirname " $SCRIPT " )
2729
2830${SCRIPTPATH} /wait_for_db.sh
2931
30- DUMP_FILE=${DUMP_FILE:- " dump_$( date +' %Y-%m-%d_%H-%M-%S' ) .sql" }
32+ DEFAULT_FILE_NAME=" dump_$( date +' %Y-%m-%d_%H-%M-%S' ) "
33+ DUMP_FILE=${DUMP_FILE:- " $DEFAULT_FILE_NAME .sql" }
34+ TAR_FILE=${TAR_FILE:- " $DEFAULT_FILE_NAME .tar" }
35+ CSV_OUTPUT_DIR=" csv_dumps"
3136
37+ CSV=false
3238SCHEMA=true
3339DATA=true
3440COMBINED=false
41+ APPS=()
3542
3643for arg in " $@ " ; do
37- case " $arg " in
44+ case " $arg " in
45+ --csv) CSV=true ;;
3846 --schema-only) DATA=false ;;
39- --data-only) SCHEMA=false ;;
40- --combined) COMBINED=true ;;
47+ --data-only) SCHEMA=false ;;
48+ --combined) COMBINED=true ;;
4149 --* )
42- echo " Unknown flag: $arg "
43- exit 1
44- ;;
50+ echo " Unknown flag: $arg "
51+ exit 1
52+ ;;
4553 * )
46- APPS+=(" $arg " ) ;;
47- esac
54+ APPS+=(" $arg " )
55+ ;;
56+ esac
4857done
4958
5059# export given apps or export DEFAULT_APPS
5160if [ " ${# APPS[@]} " -eq 0 ]; then
52- APPS=(" ${DEFAULT_APPS[@]} " )
61+ APPS=(" ${DEFAULT_APPS[@]} " )
5362fi
5463
55- >&2 echo " exporting: ${APPS[*]} "
64+ echo >&2 " exporting: ${APPS[*]} "
5665
5766# create -t flags for each app
5867INCLUDES=()
@@ -61,32 +70,59 @@ for app in "${APPS[@]}"; do
6170done
6271
6372dump_schema () {
64- echo " Dumping schema to $1 ..."
65- pg_dump --schema-only -f " $1 "
73+ echo " Dumping schema to $1 ..."
74+ pg_dump --schema-only -f " $1 "
6675}
6776
6877dump_data () {
69- echo " Dumping data to $1 ..."
70- pg_dump " ${INCLUDES[@]} " --disable-triggers --data-only > " $1 "
78+ echo " Dumping data to $1 ..."
79+ pg_dump " ${INCLUDES[@]} " --disable-triggers --data-only > " $1 "
7180}
7281
7382append_data () {
74- echo " Appending data to $1 ..."
75- pg_dump " ${INCLUDES[@]} " --disable-triggers --data-only \
76- | sed ' /^SET\|^SELECT pg_catalog.set_config/d' >> " $1 "
83+ echo " Appending data to $1 ..."
84+ pg_dump " ${INCLUDES[@]} " --disable-triggers --data-only |
85+ sed ' /^SET\|^SELECT pg_catalog.set_config/d' >> " $1 "
7786}
7887
88+ dump_csv () {
89+ mkdir -p $CSV_OUTPUT_DIR
90+ echo " Dumping data to csv..."
91+
92+ WHERE_CLAUSE=" "
93+ for app in " ${APPS[@]} " ; do
94+ if [ -n " $WHERE_CLAUSE " ]; then
95+ WHERE_CLAUSE+=" OR "
96+ fi
97+ WHERE_CLAUSE+=" tablename LIKE '${app} _%'"
98+ done
99+
100+ TABLES=$( psql -Atc " SELECT tablename FROM pg_tables WHERE schemaname='public' AND ($WHERE_CLAUSE );" )
101+
102+ for table in $TABLES ; do
103+ echo " dumping $table ..."
104+ psql -c " \copy $table TO '$CSV_OUTPUT_DIR /$table .csv' WITH CSV HEADER"
105+ done
106+
107+ tar -cf " $TAR_FILE " -C " $CSV_OUTPUT_DIR " .
108+ rm -rf " $CSV_OUTPUT_DIR "
109+ }
110+
111+ if $CSV ; then
112+ dump_csv
113+ exit 0
114+ fi
79115
80116if $COMBINED ; then
81- dump_schema " $DUMP_FILE "
82- append_data " $DUMP_FILE "
83- exit 0
117+ dump_schema " $DUMP_FILE "
118+ append_data " $DUMP_FILE "
119+ exit 0
84120fi
85121
86122if $SCHEMA ; then
87- dump_schema " schema__$DUMP_FILE "
123+ dump_schema " schema__$DUMP_FILE "
88124fi
89125
90126if $DATA ; then
91- dump_data " data__$DUMP_FILE "
127+ dump_data " data__$DUMP_FILE "
92128fi
0 commit comments