Lesstep
GitHub Actions・Ubuntu 26.04・2026年11月4日に確認

「unrecognized configuration parameter "transaction_timeout"」:Ubuntu 26.04 の pg_dump 18

ubuntu-latest は、2026年10月19日から11月19日にかけて Ubuntu 24.04 から 26.04 に移ります(ほかに変わること)。ランナーのイメージの PostgreSQL は 16.15 から 18.6 に上がり(イメージの readme)、apt-get install postgresql-client で入るのも PostgreSQL 18 です(18+290ubuntu1)。そのため、ステップの中の pg_dump・pg_restore・psql は 18 になり、postgres:16 のサービスコンテナは 16 のままです。

どう見えるか

psql:dump.sql:13: ERROR:  unrecognized configuration parameter "transaction_timeout"

pg_dump 17 以降は、どのダンプにも先頭近くに SET transaction_timeout = 0; を書きます。この設定は PostgreSQL 17 からしか無いので(PostgreSQL 17 のドキュメント)、16 以前のサーバーに読み込むとこの行で落ちます。ON_ERROR_STOP や --single-transaction を使っていれば、復元全体がそこで止まります。カスタム形式のダンプから pg_restore 18 が書く SQL にも同じ行があります。

逆向きは、まだ 24.04 に当たるジョブや 24.04 に固定したジョブで、17 や 18 のサーバーに対して出ます:

pg_dump: error: aborting because of server version mismatch
pg_dump: detail: server version: 17.6; pg_dump version: 16.15 (Ubuntu 16.15-1.pgdg24.04+2)

報告のあったもの

直し方:サーバー自身の pg_dump でダンプする

- run: docker exec ${{ job.services.postgres.id }} pg_dump -U postgres app > dump.sql

サービスコンテナには、そのサーバーに合った pg_dump があるので、ランナーのイメージが何であってもダンプはサーバーに合います。job.services.<id>.id は、GitHub が各サービスに付けるコンテナの ID です。復元も同じように docker exec -i ... psql で行います。

または、サービスをクライアントに合わせる

サービスを PostgreSQL 17 以降にすれば、pg_dump 18 のファイルはそのまま読み込めます。上のプロジェクトの1つは postgis/postgis:17-3.5 に移しました(open-klant 4d312dde)。ただし11月19日までは、同じジョブが 24.04 に当たることがあり、そこでは pg_dump 16 が 17 のサーバーを断ります。ジョブを runs-on: ubuntu-26.04 に固定するか、どちらでも動く docker exec の形を使います。

または、必要な版のクライアントを入れる

イメージは PostgreSQL の apt のリポジトリから PostgreSQL を入れたあと、そのリポジトリを外しているので、足し直すまで postgresql-client-16 は入りません(26.04 向けの resolute-pgdg はあります)。入れたあとは、ただの pg_dump ではなく版の付いたバイナリを呼びます。ただの pg_dump はイメージ自身の版のまま動くことがあります(RESIDIO のジョブは 17 を入れて 16 が動きました)。

/usr/lib/postgresql/16/bin/pg_dump -h localhost -U postgres app > dump.sql

ジョブを runs-on: ubuntu-24.04 に固定しても、クライアントは 16 に戻ります。GitHub がそのイメージを終えるまでは使えます。

sed で SET transaction_timeout の行を消せばこの1行は越えられますが、復元の訓練が実際の復元を試したことにならなくなり、あとの版はほかの設定を足すかもしれません。

見分け方

ほかの 26.04 の失敗

失敗したジョブを IntelliJ IDEA から見るなら

Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べ、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。

JetBrains Marketplace で入れる

GitHub と GitHub Actions は GitHub, Inc. の商標、Ubuntu は Canonical Ltd. の商標、PostgreSQL は PostgreSQL Community Association の登録商標、Docker は Docker, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・Canonical・PostgreSQL のプロジェクト・Docker, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。

ほかに:「The ubuntu-latest label will migrate to Ubuntu 26」 · Ubuntu 26.04 の Docker で Postgres が起動しない · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English