LoginSignup
1
1

More than 1 year has passed since last update.

GitHub ActionsでPostgreSQLの最大接続数を設定する

Last updated at Posted at 2022-06-21

経緯

今まで通ってたGHAのテストが突然落ちるようになりました。
ローカルでは問題なく通るのに、GHAのワークフローだと落ちる。
Actionsタブからログを確認すると、どうやら最大接続数が足りなくなり、論理データベースを立ち上げるインテグレーションテストが失敗しているようでした。

この記事では、GHAのワークフローでPostgreSQLの最大接続数(max_connection)を設定する方法を記します。

解決方法

前提

もともとのPostgresの設定は以下です。

# ...
jobs:
  test:
    name: Test
    runs-on: ubuntu-latest
    services:
      postgres:
        image:
          postgres: 12
        env:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: password
          POSTGRES_DB: postgres
        ports:
          - 5432:5432
    steps:
# ...

steps を追記

DockerコンテナにSSH接続して、PostgresSQLの設定ファイルを編集します。

# ...
jobs:
  test:
    name: Test
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres: 12
        env:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: password
          POSTGRES_DB: postgres
        # [追加]
        options: >-
          --name my_postgres
        ports:
          - 5432:5432
    # [追加]
    steps:
      - name: Increase max connections
      - run: |
         docker exec -i my_postgres_container bash << EOF
           sed -i -e 's/max_connections = 100/max_connections = 1000/' /var/lib/postgresql/data/postgresql.conf
         EOF
# ...

最大接続数はデフォルトでは100に設定されていますが設定ファイルを直接書き換えて1000に増やしています。

更に変更を反映させるために、コンテナを再起動させます。

    steps:
      - name: Increase max connections
      - run: |
         docker exec -i my_postgres_container bash << EOF
           sed -i -e 's/max_connections = 100/max_connections = 1000/' /var/lib/postgresql/data/postgresql.conf
         EOF
        # [追加]
         docker restart --time 0 my_postgres
         sleep 5

docker restartでコンテナを一度をkillする際、デフォルトでは10秒待つ設定になっているので --time 0 を指定しています。
sleep 5 はコンテナが起動するのを待つためです。

おわりに

これで最大接続数を増加させる設定は完了です。
しかし、これが最適なやり方なのかはわかりません。もっとスマートなやり方があったら教えてほしいです🙁

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1