mirror of
https://github.com/zitadel/zitadel.git
synced 2025-03-01 04:47:22 +00:00
fix(migration): speed up step 11 (#6086)
This commit is contained in:
parent
cef17b4a7a
commit
d0cda1b479
@ -4,7 +4,6 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"embed"
|
"embed"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/cockroachdb/cockroach-go/v2/crdb"
|
"github.com/cockroachdb/cockroach-go/v2/crdb"
|
||||||
"github.com/zitadel/logging"
|
"github.com/zitadel/logging"
|
||||||
@ -15,10 +14,8 @@ import (
|
|||||||
var (
|
var (
|
||||||
//go:embed 11/11_add_column.sql
|
//go:embed 11/11_add_column.sql
|
||||||
addEventCreatedAt string
|
addEventCreatedAt string
|
||||||
//go:embed 11/11_fetch_events.sql
|
//go:embed 11/11_update_events.sql
|
||||||
fetchCreatedAt string
|
setCreatedAt string
|
||||||
//go:embed 11/11_fill_column.sql
|
|
||||||
fillCreatedAt string
|
|
||||||
//go:embed 11/11_set_column.sql
|
//go:embed 11/11_set_column.sql
|
||||||
setCreatedAtDetails string
|
setCreatedAtDetails string
|
||||||
//go:embed 11/postgres/create_index.sql
|
//go:embed 11/postgres/create_index.sql
|
||||||
@ -55,49 +52,22 @@ func (mig *AddEventCreatedAt) Execute(ctx context.Context) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
for {
|
for i := 0; ; i++ {
|
||||||
var count int
|
var affected int64
|
||||||
err = crdb.ExecuteTx(ctx, mig.dbClient.DB, nil, func(tx *sql.Tx) error {
|
err = crdb.ExecuteTx(ctx, mig.dbClient.DB, nil, func(tx *sql.Tx) error {
|
||||||
rows, err := tx.Query(fetchCreatedAt, mig.BulkAmount)
|
res, err := tx.Exec(setCreatedAt, mig.BulkAmount)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer rows.Close()
|
|
||||||
|
|
||||||
data := make(map[string]time.Time, 20)
|
|
||||||
for rows.Next() {
|
|
||||||
count++
|
|
||||||
var (
|
|
||||||
id string
|
|
||||||
creationDate time.Time
|
|
||||||
)
|
|
||||||
|
|
||||||
err = rows.Scan(&id, &creationDate)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
data[id] = creationDate
|
affected, _ = res.RowsAffected()
|
||||||
|
|
||||||
}
|
|
||||||
if err := rows.Err(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
for id, creationDate := range data {
|
|
||||||
_, err = tx.Exec(fillCreatedAt, creationDate, id)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
logging.WithFields("count", count).Info("creation dates set")
|
logging.WithFields("step", "11", "iteration", i, "affected", affected).Info("set created_at iteration done")
|
||||||
if count < 20 {
|
if affected < int64(mig.BulkAmount) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
SELECT
|
|
||||||
id
|
|
||||||
, creation_date
|
|
||||||
FROM
|
|
||||||
eventstore.events
|
|
||||||
WHERE
|
|
||||||
created_at IS NULL
|
|
||||||
ORDER BY
|
|
||||||
event_sequence DESC
|
|
||||||
, instance_id
|
|
||||||
LIMIT $1
|
|
||||||
FOR UPDATE
|
|
@ -1 +0,0 @@
|
|||||||
UPDATE eventstore.events SET created_at = $1 WHERE id = $2
|
|
21
cmd/setup/11/11_update_events.sql
Normal file
21
cmd/setup/11/11_update_events.sql
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
UPDATE eventstore.events SET
|
||||||
|
created_at = creation_date
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
e.event_sequence as seq
|
||||||
|
, e.instance_id as i_id
|
||||||
|
, e.creation_date as cd
|
||||||
|
FROM
|
||||||
|
eventstore.events e
|
||||||
|
WHERE
|
||||||
|
created_at IS NULL
|
||||||
|
ORDER BY
|
||||||
|
event_sequence ASC
|
||||||
|
, instance_id
|
||||||
|
LIMIT $1
|
||||||
|
) AS e
|
||||||
|
WHERE
|
||||||
|
e.seq = eventstore.events.event_sequence
|
||||||
|
AND e.i_id = eventstore.events.instance_id
|
||||||
|
AND e.cd = eventstore.events.creation_date
|
||||||
|
;
|
Loading…
x
Reference in New Issue
Block a user