forked from mirrors/gotosocial
4a925e49b1
The migration that adds the `admin_account_actions` table did so at the same time as adding indexes onto the new table. This code was ran inside a `RunInTx` function, but the table creation did not use the transaction reference, while the creation of the indexes did. This could cause a race between the table and index creations, depending on the scheduling order. If the table creation did not win the race, then the migration would fail. This changeset corrects the table creation to also be done inside the same transaction as the index creation. Signed-off-by: Terin Stock <terinjokes@gmail.com> Signed-off-by: Terin Stock <terinjokes@gmail.com> |
||
---|---|---|
.. | ||
20211113114307_init | ||
20220214175650_media_cleanup | ||
20220315160814_admin_account_actions | ||
20220905150505_custom_emoji_updates | ||
20211113114307_init.go | ||
20220214175650_media_cleanup.go | ||
20220305130328_database_optimizations.go | ||
20220315160814_admin_account_actions.go | ||
20220502113806_add_missing_indexes.go | ||
20220506110822_add_account_raw_note.go | ||
20220511165212_add_account_raw_note_fix.go | ||
20220518123621_additional_indexing.go | ||
20220612091800_duplicated_media_cleanup.go | ||
20220710153020_fix_slow_web_profile_queries.go | ||
20220804120132_account_default_post_format.go | ||
20220823140228_user_custom_css.go | ||
20220827085121_assign_missing_in_reply_to_uris.go | ||
20220830014732_regenerate_indexes_for_follows.go | ||
20220903141016_store_gifs_as_image.go | ||
20220905150505_custom_emoji_updates.go | ||
20220916122701_emojis_in_accounts.go | ||
20220922142408_shared_inbox_delivery.go | ||
20220926115233_indexes.go | ||
20221006114842_add_rss_functionality.go | ||
20221011125732_refetch_updated_emojis.go | ||
main.go | ||
README.md |
Migrations
How do I write a migration file?
As a template, take one of the existing migration files and modify it, or use the below code snippet:
/*
GoToSocial
Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package migrations
import (
"context"
"github.com/uptrace/bun"
)
func init() {
up := func(ctx context.Context, db *bun.DB) error {
return db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
// your logic here
return nil
})
}
down := func(ctx context.Context, db *bun.DB) error {
return db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
// your logic here
return nil
})
}
if err := Migrations.Register(up, down); err != nil {
panic(err)
}
}
File format
Bun requires a very specific format: 14 digits, then letters or underscores.
You can use the following bash command on your branch to generate a suitable migration filename.
echo "$(date --utc +%Y%m%d%H%M%S | head -c 14)_$(git rev-parse --abbrev-ref HEAD).go"
Rules of thumb
- DON'T DROP TABLES!!!!!!!!
- Don't make something
NOT NULL
if it's likely to already containnull
fields.