1
|
#!/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
|
sedEreFlag="$(test "$(uname)" = Darwin && echo E || echo r)"
|
8
|
|
9
|
sed () { "$(which sed)" -"$sedEreFlag" "$@";}
|
10
|
|
11
|
echo 'SET standard_conforming_strings = off;'
|
12
|
echo 'SET escape_string_warning = off;'
|
13
|
sed \
|
14
|
-e 's/^ ((UNIQUE|FULLTEXT) )?KEY "([^"]*)" \([^)]*\)/ "\3_index" boolean/' \
|
15
|
-e "s/\/\*.* (SET NAMES )([0-9A-Za-z_]+) \*\/;/\1'\2';/" \
|
16
|
-e 's/ (CHARACTER SET|COLLATE) [0-9A-Za-z_]+//g' \
|
17
|
-e "s/ COMMENT '[^']*'//g" \
|
18
|
-e 's/ blob/ bytea/g' \
|
19
|
-e 's/ longtext/ text/g' \
|
20
|
-e 's/ (int|mediumint|smallint|tinyint)([ (])/ integer\2/g' \
|
21
|
-e 's/ double/ double precision/g' \
|
22
|
-e 's/ (integer|bigint|double precision|float)(\([^)]*\))?( unsigned)?/ \1/g' \
|
23
|
-e "s/'0000-00-00'/'-infinity'/g" \
|
24
|
"$@"
|