「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)
報告のあったもの
postgis/postgis:16-3.5のサービスとランナーの apt のpostgresql-clientでダンプして読み込み直す確認が、そのワークフローを共有する複数のプロジェクトで同じ週に落ちました(open-zaak #2616・referentielijsten #188・open-product #386)。postgres:16-alpineのサービスに対するバックアップと復元の訓練:バックアップは通り、復元が落ちました(evolith #35)。- 24.04 での版の食い違い:
postgresql-client-17を入れても、pg_dumpはイメージの 16 のまま動きました(RESIDIO #954)。
直し方:サーバー自身の 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行は越えられますが、復元の訓練が実際の復元を試したことにならなくなり、あとの版はほかの設定を足すかもしれません。
見分け方
pg_dump --versionは 26.04 では 18.x、24.04 では 16.x と出ます。ジョブの中で表示しておけば、どちらが動いたかがログに残ります。- 「Set up job」の Runner Image のグループにイメージが出ます。11月19日までは、再実行がもう一方のイメージに当たることがあるので、再実行が緑でも何も確かめたことになりません。
ほかの 26.04 の失敗
- Ubuntu 26.04 の Docker-in-Docker:古い iptables のモジュールが読み込まれていないので、
iptables-legacyを使うコンテナの中の dockerd(dev container の docker-in-docker 機能の:2や:3など)が「can't initialize iptables table `nat'」で落ちます。機能を:4に上げるか、ランナーでモジュールを読み込みます。 - Ubuntu 26.04 で WebdriverIO のすべてのワーカーが「Error: write EINVAL」:v9 はワーカーを
xvfb-runから起動し、26.04 のものは IPC のチャネルを引き継ぎません。9.33.1 で直りましたが、npm のlatestのタグはまだそこを指していません。 - Ubuntu 26.04 の Docker で Postgres が起動しない:7.0.0-42 などの新しいカーネルはコンテナのプロセスを
docker-default//&unconfinedとして動かすので、プロセスどうしでシグナルを送れず、gosuが CPU 100% で止まります。いまのところ報告はセルフホストのランナーです。 - Ubuntu 26.04 でビルドしたあとの「version `GLIBC_2.43' not found」:glibc が 2.43 なので、そこでビルドしたバイナリは
GLIBC_2.42やGLIBC_2.43を求めて Ubuntu 24.04・Debian 13 やそれより古い環境で起動しないことがあります。リリースは古いイメージでビルドし、CI で下限を確かめます。 - Ubuntu 26.04 の apt:名前が変わった・無くなったパッケージ。
- 「coreutils: unknown program」:基本のコマンドのほとんどが uutils です。
失敗したジョブを IntelliJ IDEA から見るなら
Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べ、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。
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