diff --git a/pkg/sql/conn_executor.go b/pkg/sql/conn_executor.go index e6365e2821dd..ba1728155fa9 100644 --- a/pkg/sql/conn_executor.go +++ b/pkg/sql/conn_executor.go @@ -4237,6 +4237,20 @@ func (ex *connExecutor) waitForTxnJobs() error { } } if !queryTimedout.Load() && len(ex.extraTxnState.jobs.created) > 0 { + jobIDs := strings.Builder{} + for i, jobID := range ex.extraTxnState.jobs.created { + if i > 0 { + jobIDs.WriteString(", ") + } + jobIDs.WriteString(jobID.String()) + } + if err := ex.planner.SendClientNotice(ex.Ctx(), + pgnotice.Newf("waiting for job(s) to complete: %s", redact.SafeString(jobIDs.String())), + true, /* immediateFlush */ + ); err != nil { + return err + } + if err := ex.server.cfg.JobRegistry.WaitForJobs(jobWaitCtx, ex.extraTxnState.jobs.created); err != nil { if errors.Is(err, context.Canceled) && queryTimedout.Load() { diff --git a/pkg/sql/run_control_test.go b/pkg/sql/run_control_test.go index b99249f45c01..3321c90da2e2 100644 --- a/pkg/sql/run_control_test.go +++ b/pkg/sql/run_control_test.go @@ -1153,10 +1153,11 @@ func TestStatementTimeoutForSchemaChangeCommit(t *testing.T) { if implicitTxn { _, err := conn.DB.ExecContext(ctx, "ALTER TABLE t1 ADD COLUMN j INT DEFAULT 32") require.ErrorContains(t, err, sqlerrors.QueryTimeoutError.Error()) - require.Equal(t, 1, len(actualNotices)) + require.Equal(t, 2, len(actualNotices)) + require.Regexp(t, "waiting for job\\(s\\) to complete: \\d+", actualNotices[0]) require.Regexp(t, "The statement has timed out, but the following background jobs have been created and will continue running: \\d+", - actualNotices[0]) + actualNotices[1]) } else { txn := conn.Begin(t) _, err := txn.Exec("SET LOCAL autocommit_before_ddl=off")