Stash Upgrade to 2.4.0 Fails with "Specified key was too long" Exception

Troubleshooting Databases

このページの内容

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

症状

The following exception is reported when upgrading Stash to 2.4.x

2013-05-07 16:38:30,539 INFO  [localhost-startStop-1]  c.a.s.internal.home.HomeLockAcquirer Successfully acquired lock on home directory /home/www/data/stash/instance for 158926@STASHSERVER
2013-05-07 16:38:34,276 ERROR [localhost-startStop-1]  liquibase Change Set liquibase/r2_4/upgrade.xml::STASHDEV-3734-4::mstudman failed.  Error: Error executing SQL ALTER TABLE `stash`.`stash_user` ADD CONSTRAINT `uq_stash_user_slug` UNIQUE (`slug`): Specified key was too long; max key length is 767 bytes
liquibase.exception.DatabaseException: Error executing SQL ALTER TABLE `stash`.`stash_user` ADD CONSTRAINT `uq_stash_user_slug` UNIQUE (`slug`): Specified key was too long; max key length is 767 bytes
	at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:62) ~[liquibase-core-2.0.5.jar:na]
	at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:104) ~[liquibase-core-2.0.5.jar:na]
	at liquibase.database.AbstractDatabase.execute(AbstractDatabase.java:1091) ~[liquibase-core-2.0.5.jar:na]
	at liquibase.database.AbstractDatabase.executeStatements(AbstractDatabase.java:1075) ~[liquibase-core-2.0.5.jar:na]
	at liquibase.changelog.ChangeSet.execute(ChangeSet.java:317) ~[liquibase-core-2.0.5.jar:na]
	at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:27) [liquibase-core-2.0.5.jar:na]
	at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:58) [liquibase-core-2.0.5.jar:na]
	at liquibase.Liquibase.update(Liquibase.java:114) [liquibase-core-2.0.5.jar:na]

Further Troubleshooting

Use a database viewer, such as DBVisualizer to connect to your current Stash database and run the following query:

run desc stash_user;

This will give an output similar to:

mysql> desc stash_user;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | NO   | PRI | NULL    |       |
| name  | varchar(255) | NO   | UNI | NULL    |       |
| slug  | varchar(255) | NO   |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

This will help confirm the table schema for 'stash_user' table.

原因

If the result of the above query does not match the expected result above but is instead:

mysql> desc stash_user;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | NO   | PRI | NULL    |       | 
| name  | varchar(255) | NO   | UNI | NULL    |       | 
| slug  | varchar(766) | NO   | UNI | NULL    |       | 
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

it indicates that the above schema is from the Stash 2.4 beta, not the final official release. This can happen if Stash was upgraded to the 2.4 beta (or attempted to) and then to 2.4 stable release.The schema in 2.4.0 and 2.4.1 is 255 characters for slug - only the beta release used 766.

The Stash upgrade task wasn't designed to upgrade from the beta to a final release, so it will take some manual SQL to help resolve it.

ソリューション

Run the following query on your Stash database:

UPDATE DATABASECHANGELOG SET ID = 'STASHDEV-3734-4', MD5SUM = '3:0915ae71248292c6cc8c73d79b6a5cc4' WHERE ID = 'STASHDEV-3734-5';

and restart Stash to complete the upgrade.

最終更新日 2018 年 11 月 2 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.