Send Describe in Batch.ExecStatement when cached fields are empty #1746
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [master] | |
| pull_request: | |
| branches: [master] | |
| jobs: | |
| test: | |
| name: Test | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| # A failure in one matrix job says nothing about the others, and cancelled jobs report a confusing "exit code | |
| # 143" instead of the actual failure. Let every job run so a single failure gives complete information. | |
| fail-fast: false | |
| matrix: | |
| go-version: ["1.25", "1.26"] | |
| pg-version: [14, 15, 16, 17, 18, cockroachdb] | |
| include: | |
| - pg-version: 14 | |
| pgx-test-database: "host=127.0.0.1 user=pgx_md5 password=secret dbname=pgx_test" | |
| pgx-test-unix-socket-conn-string: "host=/var/run/postgresql dbname=pgx_test" | |
| pgx-test-tcp-conn-string: "host=127.0.0.1 user=pgx_md5 password=secret dbname=pgx_test" | |
| pgx-test-scram-password-conn-string: "host=127.0.0.1 user=pgx_scram password=secret dbname=pgx_test channel_binding=disable" | |
| pgx-test-scram-plus-conn-string: "host=localhost user=pgx_ssl password=secret sslmode=verify-full sslrootcert=/tmp/ca.pem dbname=pgx_test channel_binding=require" | |
| pgx-test-md5-password-conn-string: "host=127.0.0.1 user=pgx_md5 password=secret dbname=pgx_test" | |
| pgx-test-plain-password-conn-string: "host=127.0.0.1 user=pgx_pw password=secret dbname=pgx_test" | |
| pgx-test-tls-conn-string: "host=localhost user=pgx_ssl password=secret sslmode=verify-full sslrootcert=/tmp/ca.pem dbname=pgx_test channel_binding=disable" | |
| pgx-ssl-password: certpw | |
| pgx-test-tls-client-conn-string: "host=localhost user=pgx_sslcert sslmode=verify-full sslrootcert=/tmp/ca.pem sslcert=/tmp/pgx_sslcert.crt sslkey=/tmp/pgx_sslcert.key dbname=pgx_test" | |
| - pg-version: 15 | |
| pgx-test-database: "host=127.0.0.1 user=pgx_md5 password=secret dbname=pgx_test" | |
| pgx-test-unix-socket-conn-string: "host=/var/run/postgresql dbname=pgx_test" | |
| pgx-test-tcp-conn-string: "host=127.0.0.1 user=pgx_md5 password=secret dbname=pgx_test" | |
| pgx-test-scram-password-conn-string: "host=127.0.0.1 user=pgx_scram password=secret dbname=pgx_test channel_binding=disable" | |
| pgx-test-scram-plus-conn-string: "host=localhost user=pgx_ssl password=secret sslmode=verify-full sslrootcert=/tmp/ca.pem dbname=pgx_test channel_binding=require" | |
| pgx-test-md5-password-conn-string: "host=127.0.0.1 user=pgx_md5 password=secret dbname=pgx_test" | |
| pgx-test-plain-password-conn-string: "host=127.0.0.1 user=pgx_pw password=secret dbname=pgx_test" | |
| pgx-test-tls-conn-string: "host=localhost user=pgx_ssl password=secret sslmode=verify-full sslrootcert=/tmp/ca.pem dbname=pgx_test channel_binding=disable" | |
| pgx-ssl-password: certpw | |
| pgx-test-tls-client-conn-string: "host=localhost user=pgx_sslcert sslmode=verify-full sslrootcert=/tmp/ca.pem sslcert=/tmp/pgx_sslcert.crt sslkey=/tmp/pgx_sslcert.key dbname=pgx_test" | |
| - pg-version: 16 | |
| pgx-test-database: "host=127.0.0.1 user=pgx_md5 password=secret dbname=pgx_test" | |
| pgx-test-unix-socket-conn-string: "host=/var/run/postgresql dbname=pgx_test" | |
| pgx-test-tcp-conn-string: "host=127.0.0.1 user=pgx_md5 password=secret dbname=pgx_test" | |
| pgx-test-scram-password-conn-string: "host=127.0.0.1 user=pgx_scram password=secret dbname=pgx_test channel_binding=disable" | |
| pgx-test-scram-plus-conn-string: "host=localhost user=pgx_ssl password=secret sslmode=verify-full sslrootcert=/tmp/ca.pem dbname=pgx_test channel_binding=require" | |
| pgx-test-md5-password-conn-string: "host=127.0.0.1 user=pgx_md5 password=secret dbname=pgx_test" | |
| pgx-test-plain-password-conn-string: "host=127.0.0.1 user=pgx_pw password=secret dbname=pgx_test" | |
| pgx-test-tls-conn-string: "host=localhost user=pgx_ssl password=secret sslmode=verify-full sslrootcert=/tmp/ca.pem dbname=pgx_test channel_binding=disable" | |
| pgx-ssl-password: certpw | |
| pgx-test-tls-client-conn-string: "host=localhost user=pgx_sslcert sslmode=verify-full sslrootcert=/tmp/ca.pem sslcert=/tmp/pgx_sslcert.crt sslkey=/tmp/pgx_sslcert.key dbname=pgx_test" | |
| - pg-version: 17 | |
| pgx-test-database: "host=127.0.0.1 user=pgx_md5 password=secret dbname=pgx_test" | |
| pgx-test-unix-socket-conn-string: "host=/var/run/postgresql dbname=pgx_test" | |
| pgx-test-tcp-conn-string: "host=127.0.0.1 user=pgx_md5 password=secret dbname=pgx_test" | |
| pgx-test-scram-password-conn-string: "host=127.0.0.1 user=pgx_scram password=secret dbname=pgx_test channel_binding=disable" | |
| pgx-test-scram-plus-conn-string: "host=localhost user=pgx_ssl password=secret sslmode=verify-full sslrootcert=/tmp/ca.pem dbname=pgx_test channel_binding=require" | |
| pgx-test-md5-password-conn-string: "host=127.0.0.1 user=pgx_md5 password=secret dbname=pgx_test" | |
| pgx-test-plain-password-conn-string: "host=127.0.0.1 user=pgx_pw password=secret dbname=pgx_test" | |
| pgx-test-tls-conn-string: "host=localhost user=pgx_ssl password=secret sslmode=verify-full sslrootcert=/tmp/ca.pem dbname=pgx_test channel_binding=disable" | |
| pgx-ssl-password: certpw | |
| pgx-test-tls-client-conn-string: "host=localhost user=pgx_sslcert sslmode=verify-full sslrootcert=/tmp/ca.pem sslcert=/tmp/pgx_sslcert.crt sslkey=/tmp/pgx_sslcert.key dbname=pgx_test" | |
| - pg-version: 18 | |
| pgx-test-database: "host=127.0.0.1 user=pgx_md5 password=secret dbname=pgx_test" | |
| pgx-test-unix-socket-conn-string: "host=/var/run/postgresql dbname=pgx_test" | |
| pgx-test-tcp-conn-string: "host=127.0.0.1 user=pgx_md5 password=secret dbname=pgx_test" | |
| pgx-test-scram-password-conn-string: "host=127.0.0.1 user=pgx_scram password=secret dbname=pgx_test channel_binding=disable" | |
| pgx-test-scram-plus-conn-string: "host=localhost user=pgx_ssl password=secret sslmode=verify-full sslrootcert=/tmp/ca.pem dbname=pgx_test channel_binding=require" | |
| pgx-test-md5-password-conn-string: "host=127.0.0.1 user=pgx_md5 password=secret dbname=pgx_test" | |
| pgx-test-plain-password-conn-string: "host=127.0.0.1 user=pgx_pw password=secret dbname=pgx_test" | |
| pgx-test-tls-conn-string: "host=localhost user=pgx_ssl password=secret sslmode=verify-full sslrootcert=/tmp/ca.pem dbname=pgx_test channel_binding=disable" | |
| pgx-test-oauth: "true" | |
| pgx-ssl-password: certpw | |
| pgx-test-tls-client-conn-string: "host=localhost user=pgx_sslcert sslmode=verify-full sslrootcert=/tmp/ca.pem sslcert=/tmp/pgx_sslcert.crt sslkey=/tmp/pgx_sslcert.key dbname=pgx_test" | |
| - pg-version: cockroachdb | |
| pgx-test-database: "postgresql://root@127.0.0.1:26257/pgx_test?sslmode=disable&experimental_enable_temp_tables=on" | |
| steps: | |
| - name: Check out code into the Go module directory | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| - name: Setup database server for testing | |
| run: ci/setup_test.bash | |
| env: | |
| PGVERSION: ${{ matrix.pg-version }} | |
| # - name: Setup upterm session | |
| # uses: lhotari/action-upterm@v1 | |
| # with: | |
| # ## limits ssh access and adds the ssh public key for the user which triggered the workflow | |
| # limit-access-to-actor: true | |
| # env: | |
| # PGX_TEST_DATABASE: ${{ matrix.pgx-test-database }} | |
| # PGX_TEST_UNIX_SOCKET_CONN_STRING: ${{ matrix.pgx-test-unix-socket-conn-string }} | |
| # PGX_TEST_TCP_CONN_STRING: ${{ matrix.pgx-test-tcp-conn-string }} | |
| # PGX_TEST_SCRAM_PASSWORD_CONN_STRING: ${{ matrix.pgx-test-scram-password-conn-string }} | |
| # PGX_TEST_MD5_PASSWORD_CONN_STRING: ${{ matrix.pgx-test-md5-password-conn-string }} | |
| # PGX_TEST_PLAIN_PASSWORD_CONN_STRING: ${{ matrix.pgx-test-plain-password-conn-string }} | |
| # PGX_TEST_TLS_CONN_STRING: ${{ matrix.pgx-test-tls-conn-string }} | |
| # PGX_SSL_PASSWORD: ${{ matrix.pgx-ssl-password }} | |
| # PGX_TEST_TLS_CLIENT_CONN_STRING: ${{ matrix.pgx-test-tls-client-conn-string }} | |
| - name: Check formatting | |
| run: | | |
| gofmt -l -s -w . | |
| git status | |
| git diff --exit-code | |
| - name: Test | |
| # Parallel testing used to kill the runner. The cause was the pgproto3 tests that encode a maximum size (~1GB) | |
| # message: with the race detector's shadow memory they peaked at 27GB of RSS when run in parallel, well past the | |
| # 16GB a runner has. Those tests no longer run under the race detector, and the whole suite now peaks around 1GB | |
| # either way, so parallel testing is enabled again. It cuts this step from ~72s to ~26s. | |
| run: go test -race ./... | |
| env: | |
| PGX_TEST_DATABASE: ${{ matrix.pgx-test-database }} | |
| PGX_TEST_UNIX_SOCKET_CONN_STRING: ${{ matrix.pgx-test-unix-socket-conn-string }} | |
| PGX_TEST_TCP_CONN_STRING: ${{ matrix.pgx-test-tcp-conn-string }} | |
| PGX_TEST_SCRAM_PASSWORD_CONN_STRING: ${{ matrix.pgx-test-scram-password-conn-string }} | |
| PGX_TEST_MD5_PASSWORD_CONN_STRING: ${{ matrix.pgx-test-md5-password-conn-string }} | |
| PGX_TEST_PLAIN_PASSWORD_CONN_STRING: ${{ matrix.pgx-test-plain-password-conn-string }} | |
| PGX_TEST_OAUTH: ${{ matrix.pgx-test-oauth }} | |
| # TestConnectTLS fails. However, it succeeds if I connect to the CI server with upterm and run it. Give up on that test for now. | |
| # PGX_TEST_TLS_CONN_STRING: ${{ matrix.pgx-test-tls-conn-string }} | |
| # PGX_TEST_SCRAM_PLUS_CONN_STRING: ${{ matrix.pgx-test-scram-plus-conn-string }} | |
| PGX_SSL_PASSWORD: ${{ matrix.pgx-ssl-password }} | |
| PGX_TEST_TLS_CLIENT_CONN_STRING: ${{ matrix.pgx-test-tls-client-conn-string }} | |
| test-pgbouncer: | |
| name: Test PgBouncer with PostgreSQL 18 | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - name: Check out code into the Go module directory | |
| uses: actions/checkout@v5 | |
| - name: Set up Go 1.26 | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: "1.26" | |
| - name: Set up PostgreSQL 18 | |
| run: ci/setup_test.bash | |
| env: | |
| PGVERSION: "18" | |
| - name: Set up PgBouncer | |
| run: ci/setup_pgbouncer.bash | |
| - name: Test PgBouncer | |
| run: go test -parallel=1 -race -count=1 -run 'TestPgbouncer|TestConnContextCanceledCancelsRunningQueryOnServer' ./... | |
| env: | |
| PGX_TEST_DATABASE: "host=127.0.0.1 user=pgx_md5 password=secret dbname=pgx_test" | |
| PGX_TEST_PGBOUNCER_CONN_STRING: "host=127.0.0.1 port=6432 user=pgx_md5 password=secret dbname=pgx_test" | |
| test-windows: | |
| name: Test Windows | |
| runs-on: windows-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| go-version: ["1.25", "1.26"] | |
| steps: | |
| - name: Setup PostgreSQL | |
| id: postgres | |
| uses: ikalnytskyi/action-setup-postgres@v4 | |
| with: | |
| database: pgx_test | |
| - name: Check out code into the Go module directory | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| - name: Initialize test database | |
| run: | | |
| psql -f testsetup/postgresql_setup.sql pgx_test | |
| env: | |
| PGSERVICE: ${{ steps.postgres.outputs.service-name }} | |
| shell: bash | |
| - name: Test | |
| # Parallel testing stays disabled here even though the Linux jobs enable it. This is the slower runner and every | |
| # timing sensitive test failure so far has come from it, so leave it serial until the Linux jobs have proven the | |
| # change. | |
| # Disabling CGO because that is not working on the Windows runner. Apparently, we could install MingW and set up | |
| # CGO to work, but disabling CGO takes less CI time. Without CGO, we also must not use the race detector. | |
| run: go test -parallel=1 ./... | |
| env: | |
| CGO_ENABLED: 0 | |
| PGX_TEST_DATABASE: ${{ steps.postgres.outputs.connection-uri }} |