From 8cac948d7e13ad394f6981463a4fc398eab99918 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Thu, 10 Nov 2022 10:54:49 +0000 Subject: [PATCH] Drop constraint if exists --- .../deltas/2022110411000000_server_names.go | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/userapi/storage/postgres/deltas/2022110411000000_server_names.go b/userapi/storage/postgres/deltas/2022110411000000_server_names.go index 6b19805ba..12d34b50c 100644 --- a/userapi/storage/postgres/deltas/2022110411000000_server_names.go +++ b/userapi/storage/postgres/deltas/2022110411000000_server_names.go @@ -45,19 +45,25 @@ func UpServerNames(ctx context.Context, tx *sql.Tx, serverName gomatrixserverlib return fmt.Errorf("add server name to %q error: %w", table, err) } } + // Commit at this point, because it's possible that altering indices will + // fail and force us to roll back. + if err := tx.Commit(); err != nil { + return fmt.Errorf("can't commit after column addition: %w", err) + } for newTable, oldTable := range serverNamesDropPK { q := fmt.Sprintf( - "ALTER TABLE IF EXISTS %s DROP CONSTRAINT %s;", + "ALTER TABLE IF EXISTS %s DROP CONSTRAINT IF EXISTS %s;", pq.QuoteIdentifier(newTable), pq.QuoteIdentifier(newTable+"_pkey"), ) if _, err := tx.ExecContext(ctx, q); err != nil { - q = fmt.Sprintf( - "ALTER TABLE IF EXISTS %s DROP CONSTRAINT %s;", - pq.QuoteIdentifier(oldTable), pq.QuoteIdentifier(oldTable+"_pkey"), - ) - if _, err := tx.ExecContext(ctx, q); err != nil { - return fmt.Errorf("drop PK from %q / %q error: %w", newTable, oldTable, err) - } + return fmt.Errorf("drop PK from %q error: %w", newTable, err) + } + q = fmt.Sprintf( + "ALTER TABLE IF EXISTS %s DROP CONSTRAINT IF EXISTS %s;", + pq.QuoteIdentifier(oldTable), pq.QuoteIdentifier(oldTable+"_pkey"), + ) + if _, err := tx.ExecContext(ctx, q); err != nil { + return fmt.Errorf("drop PK from %q error: %w", oldTable, err) } } return nil