1 |
4426
|
aaronmk
|
#!/bin/sh
|
2 |
|
|
# Translates a MySQL DB export to PostgreSQL
|
3 |
|
|
# The export must be created with:
|
4 |
|
|
# `--compatible=postgresql --add-locks=false --set-charset`
|
5 |
|
|
# Usage: self {input...|<input} >translated
|
6 |
|
|
|
7 |
7542
|
aaronmk
|
selfDir="$(dirname -- "$0")"
|
8 |
|
|
|
9 |
4426
|
aaronmk
|
sedEreFlag="$(test "$(uname)" = Darwin && echo E || echo r)"
|
10 |
|
|
|
11 |
|
|
sed () { "$(which sed)" -"$sedEreFlag" "$@";}
|
12 |
|
|
|
13 |
|
|
sed \
|
14 |
7541
|
aaronmk
|
-e 's/ UNIQUE KEY ("[^"]*")/ \/*CONSTRAINT \1 *\/UNIQUE/g' \
|
15 |
7540
|
aaronmk
|
-e 's/ UNIQUE KEY/ UNIQUE/g' \
|
16 |
|
|
-e 's/^ ((CONSTRAINT "[^"]*" )?((FULLTEXT|FOREIGN) )?KEY .*[^,])(,?)$/ \/*\1*\/CHECK (true)\5/' \
|
17 |
4426
|
aaronmk
|
-e "s/\/\*.* (SET NAMES )([0-9A-Za-z_]+) \*\/;/\1'\2';/" \
|
18 |
7534
|
aaronmk
|
-e 's/ (CHARACTER SET|COLLATE) [0-9A-Za-z_]+//g' \
|
19 |
6070
|
aaronmk
|
-e "s/ COMMENT '[^']*'//g" \
|
20 |
7693
|
aaronmk
|
-e 's/ (binary|blob)/ bytea/g' \
|
21 |
7796
|
aaronmk
|
-e 's/ (tinytext|mediumtext|longtext)/ text/g' \
|
22 |
6165
|
aaronmk
|
-e 's/ (int|mediumint|smallint|tinyint)([ (])/ integer\2/g' \
|
23 |
4426
|
aaronmk
|
-e 's/ double/ double precision/g' \
|
24 |
7694
|
aaronmk
|
-e 's/ (integer|bigint|bytea|double precision|float)(\([^)]*\))?( unsigned)?/ \1/g' \
|
25 |
7695
|
aaronmk
|
-e 's/ (char)\(0\)/ \1/g' \
|
26 |
7535
|
aaronmk
|
-e 's/ datetime/ timestamp/g' \
|
27 |
8259
|
aaronmk
|
-e 's/ ("[^"]*") enum(\([^()]*\))/ \1 text CHECK (\1 in \2)/g' \
|
28 |
7542
|
aaronmk
|
"$@"\
|
29 |
|
|
|"$selfDir/my2pg.data"
|