Hallo zusammen,
Auf Github habe ich ein Shellscript gefunden das eine MySQL DB nach SQLite migriert.
https://gist.github.com/esperlu/943776
Es funktioniert recht gut. Was mir jedoch aufgefallen ist:
Meine DB hat ein paar Unique Constraints. Diese werden nicht richtig umgewandelt.
Es wird nur ein normnaler Index angelegt.
Ich bin jetzt leider kein Shellscript Guru und blicke nur bedingt durch was da passiert.
Ich denke diese Sektion am Ende sucht im exportierten MySQL dump nach dem Vorkommern eines KEY und macht dann ganz unten später ein CREATE INDEX ...
Jetzt wäre es toll, wenn das Script noch unterscheiden könnte zwischen KEY und UNIQUE KEY
Ich blicks leider nicht wie man das IF und match anpassen muss.
Gibt es hier vielleicht einen Experten der das kann?
----------------------------------------------
KEY
lines are extracted from the CREATE
block and stored in array for later print
in a separate CREATE KEY
command. The index name is prefixed by the table name to
avoid a sqlite error for duplicate index name.
/^( KEY|);)/ {
if (prev) print prev
prev=""
if ($0 == ");"){
print
} else {
if ( match( $0, /"[^"]+/ ) ) indexName = substr( $0, RSTART+1, RLENGTH-1 )
if ( match( $0, /([^()]+/ ) ) indexKey = substr( $0, RSTART+1, RLENGTH-1 )
key[tableName]=key[tableName] "CREATE INDEX "" tableName "_" indexName "" ON "" tableName "" (" indexKey ");\n"
}
}
Print all KEY
creation lines.
END {
for (table in key) printf key[table]
print "END TRANSACTION;"
}
'
----------------------------------------------
vielen Dank und viele Grüße
hawk