[Dbconfig-common-devel] Difficult/partial upgrade
Karsten Hilbert
Karsten.Hilbert at gmx.net
Sun Feb 20 16:23:51 UTC 2011
On Sat, Feb 19, 2011 at 10:27:32AM +0100, Vincent Bernat wrote:
> There are two parts in the fix:
> 1. I have commented index creation in the upgrade file to avoid that
> users upgrading to the new version get a failed upgrade. The index
> creation is moved into postinst.
That's clever.
> 2. For users that already upgraded, I force to replay the whole upgrade
> file without checking for errors.
>
> The postinst snippet follows (it should hurt some eyes):
>
> #v+
> if [ -n "$2" ] && dpkg --compare-versions "$2" le 0.5.1+dfsg-2; then
> db_get roundcube/dbconfig-upgrade || true
> if [ x"$RET" = x"true" ]; then
> if [ x"$dbc_dbtype" = x"mysql" ]; then
> # Ok, we may need to do some upgrade steps.
> echo "Fixing MySQL installation..."
> if dpkg --compare-versions "$2" ge 0.5; then
> # Hack (ugly) to replace "mysql" by "mysql -f"
> real_mysql="$(which mysql)"
> workdir="$(mktemp -d)"
> oldpath="$PATH"
> cat <<EOF > "$workdir/mysql"
> #!/bin/sh
> "$real_mysql" "\$@" -f
> EOF
> chmod +x "$workdir/mysql"
> PATH="$workdir:$PATH"
> dbc_mysql_exec_file \
> /usr/share/dbconfig-common/data/roundcube/upgrade/mysql/0.5-1 || true
> PATH="$oldpath"
> rm -rf "$workdir"
> fi
> cat <<EOF | while read command; do dbc_mysql_exec_command "$command" || true ; done
> ALTER TABLE \`messages\` ADD INDEX \`index_index\` (\`user_id\`, \`cache_key\`, \`idx\`);
> ALTER TABLE \`contacts\`ADD INDEX \`user_contacts_index\` (\`user_id\`,\`email\`);
> ALTER TABLE \`identities\` ADD INDEX \`user_identities_index\` (\`user_id\`, \`del\`);
> EOF
> fi
> fi
> fi
> #v-
Hm, why not simply DROP the offending INDEXe before
(re)-creating them and ignoring errors on the drop ?
After all, the worst that might happen is that while the
INDEXs are briefly unavailable some queries would run slower
than normal ...
Karsten
--
GPG key ID E4071346 @ gpg-keyserver.de
E167 67FD A291 2BEA 73BD 4537 78B9 A9F9 E407 1346
More information about the Dbconfig-common-devel
mailing list