forked from IHTSDO/snomed-database-loader
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathload_release-postgresql.sh
executable file
·118 lines (102 loc) · 3.64 KB
/
load_release-postgresql.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/bin/bash
set -e;
cd "`dirname "$0"`"
basedir="$(pwd)"
releasePath=$1
dbName=$2
loadType=$3
if [ -z ${loadType} ]
then
echo "Usage <release location> <db schema name> <DELTA|SNAP|FULL|ALL>"
exit -1
fi
dbUsername=postgres
echo "Enter postgres username [$dbUsername]:"
read newDbUsername
if [ -n "$newDbUsername" ]
then
dbUsername=$newDbUsername
fi
dbPortNumber=5432
echo "Enter postgres port number [$dbPortNumber|:"
read newDbPortNumber
if [ -n "$newDbPortNumber" ]
then
dbPortNumber=$newDbPortNumber
fi
#Unzip the files here, junking the structure
localExtract="tmp_extracted"
generatedLoadScript="tmp_loader.sql"
generatedEnvScript="tmp_environment-postgresql.sql"
#What types of files are we loading - delta, snapshot, full or all?
case "${loadType}" in
'DELTA') fileTypes=(Delta)
unzip -j ${releasePath} "*Delta*" -d ${localExtract}
;;
'SNAP') fileTypes=(Snapshot)
unzip -j ${releasePath} "*Snapshot*" -d ${localExtract}
;;
'FULL') fileTypes=(Full)
unzip -j ${releasePath} "*Full*" -d ${localExtract}
;;
'ALL') fileTypes=(Delta Snapshot Full)
unzip -j ${releasePath} -d ${localExtract}
;;
*) echo "File load type ${loadType} not recognised"
exit -1;
;;
esac
#Determine the release date from the filenames
releaseDate=`ls -1 ${localExtract}/*.txt | head -1 | egrep -o '[0-9]{8}'`
#Generate the environemnt script by running through the template as
#many times as required
#now=`date +"%Y%m%d_%H%M%S"`
#echo -e "\nGenerating Environment script for ${loadType} type(s)"
#echo "/* Script Generated Automatically by load_release.sh ${now} */" > ${generatedEnvScript}
#for fileType in ${fileTypes[@]}; do
# fileTypeLetter=`echo "${fileType}" | head -c 1 | tr '[:upper:]' '[:lower:]'`
# tail -n +2 environment-postgresql-mysql.sql | while read thisLine
# do
# echo "${thisLine/TYPE/${fileTypeLetter}}" >> ${generatedEnvScript}
# done
#done
function addLoadScript() {
for fileType in ${fileTypes[@]}; do
fileName=${1/TYPE/${fileType}}
fileName=${fileName/DATE/${releaseDate}}
#Check file exists - try beta version if not
if [ ! -f ${localExtract}/${fileName} ]; then
origFilename=${fileName}
fileName="x${fileName}"
if [ ! -f ${localExtract}/${fileName} ]; then
echo "Unable to find ${origFilename} or beta version"
exit -1
fi
fi
tableName=${2}_`echo $fileType | head -c 1 | tr '[:upper:]' '[:lower:]'`
echo -e "COPY curr_${tableName}" >> ${generatedLoadScript}
echo -e "FROM '"${basedir}/${localExtract}/${fileName}"'" >> ${generatedLoadScript}
echo -e "WITH (FORMAT csv, HEADER true, DELIMITER E' ', QUOTE E'\b');" >> ${generatedLoadScript}
echo -e "" >> ${generatedLoadScript}
done
}
echo -e "\nGenerating loading script for $releaseDate"
echo "/* Generated Loader Script */" > ${generatedLoadScript}
echo "" >> ${generatedLoadScript}
echo "set schema 'snomedct';" >> ${generatedLoadScript}
echo "" >> ${generatedLoadScript}
addLoadScript sct2_Concept_TYPE_INT_DATE.txt concept
addLoadScript sct2_Description_TYPE-en_INT_DATE.txt description
addLoadScript sct2_StatedRelationship_TYPE_INT_DATE.txt stated_relationship
addLoadScript sct2_Relationship_TYPE_INT_DATE.txt relationship
addLoadScript sct2_TextDefinition_TYPE-en_INT_DATE.txt textdefinition
addLoadScript der2_cRefset_AttributeValueTYPE_INT_DATE.txt attributevaluerefset
addLoadScript der2_cRefset_LanguageTYPE-en_INT_DATE.txt langrefset
addLoadScript der2_cRefset_AssociationReferenceTYPE_INT_DATE.txt associationrefset
psql -U ${dbUsername} -p ${dbPortNumber} -d ${dbName} << EOF
\ir create-database-postgres.sql;
\ir environment-postgresql.sql;
\ir ${generatedLoadScript};
EOF
rm -rf $localExtract
#We'll leave the generated environment & load scripts for inspection