migrate.go
· 3.6 KiB · Go
原始文件
func ApplyMigrations() {
/*
webhooks.created_by TEXT NOT NULL [set unfilled to '']
webhooks.last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
webhooks.last_updated_by TEXT NOT NULL [set unfilled to '']
repos.created_by TEXT NOT NULL [set unfilled to '']
repos.last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
repos.last_updated_by TEXT NOT NULL [set unfilled to '']
event_modifiers.created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
event_modifiers.created_by TEXT NOT NULL [set unfilled to '']
event_modifiers.last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
event_modifiers.last_updated_by TEXT NOT NULL [set unfilled to '']
webhook_logs.webhook_id text not null references webhooks (id) ON UPDATE CASCADE ON DELETE CASCADE [drop all if webhook_id unset]
webhook_logs.created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
webhook_logs.created_by TEXT NOT NULL [set unfilled to '']
webhook_logs.last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
webhook_logs.last_updated_by TEXT NOT NULL [set unfilled to '']
*/
tx, err := Pool.Begin(Context)
if err != nil {
Logger.Fatal("Could not start migration transaction", zap.Error(err))
}
defer tx.Rollback(Context)
var countOfWebhookId int64
err = tx.QueryRow(Context, "SELECT COUNT(*) FROM information_schema.columns WHERE table_name = 'webhook_logs' AND column_name = 'webhook_id'").Scan(&countOfWebhookId)
if err != nil {
Logger.Fatal("Could not check for webhook_id column", zap.Error(err))
}
if countOfWebhookId == 0 {
_, err = tx.Exec(Context, `
DELETE FROM webhook_logs
`)
if err != nil {
Logger.Fatal("Could not delete webhook_logs", zap.Error(err))
}
}
_, err = tx.Exec(Context, `
ALTER TABLE webhooks ADD COLUMN IF NOT EXISTS created_by TEXT NOT NULL DEFAULT '';
ALTER TABLE webhooks ALTER COLUMN created_by DROP DEFAULT;
ALTER TABLE webhooks ADD COLUMN IF NOT EXISTS last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW();
ALTER TABLE webhooks ADD COLUMN IF NOT EXISTS last_updated_by TEXT NOT NULL DEFAULT '';
ALTER TABLE webhooks ALTER COLUMN last_updated_by DROP DEFAULT;
ALTER TABLE repos ADD COLUMN IF NOT EXISTS created_by TEXT NOT NULL DEFAULT '';
ALTER TABLE repos ALTER COLUMN created_by DROP DEFAULT;
ALTER TABLE repos ADD COLUMN IF NOT EXISTS last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW();
ALTER TABLE repos ADD COLUMN IF NOT EXISTS last_updated_by TEXT NOT NULL DEFAULT '';
ALTER TABLE repos ALTER COLUMN last_updated_by DROP DEFAULT;
ALTER TABLE event_modifiers ADD COLUMN IF NOT EXISTS created_at TIMESTAMPTZ NOT NULL DEFAULT NOW();
ALTER TABLE event_modifiers ADD COLUMN IF NOT EXISTS created_by TEXT NOT NULL DEFAULT '';
ALTER TABLE event_modifiers ALTER COLUMN created_by DROP DEFAULT;
ALTER TABLE event_modifiers ADD COLUMN IF NOT EXISTS last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW();
ALTER TABLE event_modifiers ADD COLUMN IF NOT EXISTS last_updated_by TEXT NOT NULL DEFAULT '';
ALTER TABLE event_modifiers ALTER COLUMN last_updated_by DROP DEFAULT;
ALTER TABLE webhook_logs ADD COLUMN IF NOT EXISTS webhook_id TEXT NOT NULL REFERENCES webhooks (id) ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE webhook_logs ADD COLUMN IF NOT EXISTS created_at TIMESTAMPTZ NOT NULL DEFAULT NOW();
ALTER TABLE webhook_logs ADD COLUMN IF NOT EXISTS created_by TEXT NOT NULL DEFAULT '';
ALTER TABLE webhook_logs ALTER COLUMN created_by DROP DEFAULT;
ALTER TABLE webhook_logs ADD COLUMN IF NOT EXISTS last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW();
ALTER TABLE webhook_logs ADD COLUMN IF NOT EXISTS last_updated_by TEXT NOT NULL DEFAULT '';
ALTER TABLE webhook_logs ALTER COLUMN last_updated_by DROP DEFAULT;
`)
}
1 | func ApplyMigrations() { |
2 | /* |
3 | webhooks.created_by TEXT NOT NULL [set unfilled to ''] |
4 | webhooks.last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() |
5 | webhooks.last_updated_by TEXT NOT NULL [set unfilled to ''] |
6 | |
7 | repos.created_by TEXT NOT NULL [set unfilled to ''] |
8 | repos.last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() |
9 | repos.last_updated_by TEXT NOT NULL [set unfilled to ''] |
10 | |
11 | event_modifiers.created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() |
12 | event_modifiers.created_by TEXT NOT NULL [set unfilled to ''] |
13 | event_modifiers.last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() |
14 | event_modifiers.last_updated_by TEXT NOT NULL [set unfilled to ''] |
15 | |
16 | webhook_logs.webhook_id text not null references webhooks (id) ON UPDATE CASCADE ON DELETE CASCADE [drop all if webhook_id unset] |
17 | webhook_logs.created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() |
18 | webhook_logs.created_by TEXT NOT NULL [set unfilled to ''] |
19 | webhook_logs.last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() |
20 | webhook_logs.last_updated_by TEXT NOT NULL [set unfilled to ''] |
21 | */ |
22 | |
23 | tx, err := Pool.Begin(Context) |
24 | |
25 | if err != nil { |
26 | Logger.Fatal("Could not start migration transaction", zap.Error(err)) |
27 | } |
28 | |
29 | defer tx.Rollback(Context) |
30 | |
31 | var countOfWebhookId int64 |
32 | err = tx.QueryRow(Context, "SELECT COUNT(*) FROM information_schema.columns WHERE table_name = 'webhook_logs' AND column_name = 'webhook_id'").Scan(&countOfWebhookId) |
33 | |
34 | if err != nil { |
35 | Logger.Fatal("Could not check for webhook_id column", zap.Error(err)) |
36 | } |
37 | |
38 | if countOfWebhookId == 0 { |
39 | _, err = tx.Exec(Context, ` |
40 | DELETE FROM webhook_logs |
41 | `) |
42 | |
43 | if err != nil { |
44 | Logger.Fatal("Could not delete webhook_logs", zap.Error(err)) |
45 | } |
46 | } |
47 | |
48 | _, err = tx.Exec(Context, ` |
49 | ALTER TABLE webhooks ADD COLUMN IF NOT EXISTS created_by TEXT NOT NULL DEFAULT ''; |
50 | ALTER TABLE webhooks ALTER COLUMN created_by DROP DEFAULT; |
51 | ALTER TABLE webhooks ADD COLUMN IF NOT EXISTS last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(); |
52 | ALTER TABLE webhooks ADD COLUMN IF NOT EXISTS last_updated_by TEXT NOT NULL DEFAULT ''; |
53 | ALTER TABLE webhooks ALTER COLUMN last_updated_by DROP DEFAULT; |
54 | |
55 | ALTER TABLE repos ADD COLUMN IF NOT EXISTS created_by TEXT NOT NULL DEFAULT ''; |
56 | ALTER TABLE repos ALTER COLUMN created_by DROP DEFAULT; |
57 | ALTER TABLE repos ADD COLUMN IF NOT EXISTS last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(); |
58 | ALTER TABLE repos ADD COLUMN IF NOT EXISTS last_updated_by TEXT NOT NULL DEFAULT ''; |
59 | ALTER TABLE repos ALTER COLUMN last_updated_by DROP DEFAULT; |
60 | |
61 | ALTER TABLE event_modifiers ADD COLUMN IF NOT EXISTS created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(); |
62 | ALTER TABLE event_modifiers ADD COLUMN IF NOT EXISTS created_by TEXT NOT NULL DEFAULT ''; |
63 | ALTER TABLE event_modifiers ALTER COLUMN created_by DROP DEFAULT; |
64 | ALTER TABLE event_modifiers ADD COLUMN IF NOT EXISTS last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(); |
65 | ALTER TABLE event_modifiers ADD COLUMN IF NOT EXISTS last_updated_by TEXT NOT NULL DEFAULT ''; |
66 | ALTER TABLE event_modifiers ALTER COLUMN last_updated_by DROP DEFAULT; |
67 | |
68 | ALTER TABLE webhook_logs ADD COLUMN IF NOT EXISTS webhook_id TEXT NOT NULL REFERENCES webhooks (id) ON UPDATE CASCADE ON DELETE CASCADE; |
69 | ALTER TABLE webhook_logs ADD COLUMN IF NOT EXISTS created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(); |
70 | ALTER TABLE webhook_logs ADD COLUMN IF NOT EXISTS created_by TEXT NOT NULL DEFAULT ''; |
71 | ALTER TABLE webhook_logs ALTER COLUMN created_by DROP DEFAULT; |
72 | ALTER TABLE webhook_logs ADD COLUMN IF NOT EXISTS last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(); |
73 | ALTER TABLE webhook_logs ADD COLUMN IF NOT EXISTS last_updated_by TEXT NOT NULL DEFAULT ''; |
74 | ALTER TABLE webhook_logs ALTER COLUMN last_updated_by DROP DEFAULT; |
75 | `) |
76 | } |
77 |