mirror of
https://github.com/coder/coder.git
synced 2026-06-03 13:08:25 +00:00
8955599bd0
Closes https://github.com/coder/internal/issues/965 Recent `pg_dump` patch releases (13.22+ / 14.19+ / 15.14+ / 16.10+ / 17.6+) emit `\restrict` / `\unrestrict` psql meta-commands at the head and tail of schema dumps. These broke both `sqlc` and our `scripts/migrate-test` schema-equality check. PR #19696 worked around it by pinning `pg_dump` to a Docker image. This change unpins the workaround now that `sqlc` handles the meta-commands: * Bumps the coder/sqlc fork pin to [`337309b` on coder/sqlc:main](https://github.com/coder/sqlc/commit/337309bfb9524f38466a5090e310040fc7af0203), the merge of upstream v1.31.1 (coder/sqlc#6). v1.31.1 includes [sqlc-dev/sqlc#4390](https://github.com/sqlc-dev/sqlc/pull/4390), the upstream `\restrict` / `\unrestrict` parser fix. Updated in three places that pin the fork SHA: `flake.nix` (`sqlc-custom`), `.github/actions/setup-sqlc/action.yaml`, and the `dogfood/coder/ubuntu-{22,26}.04` Dockerfiles. The flake's `sha256` / `vendorHash` are reset to `pkgs.lib.fakeSha256`; Nix will surface the real hashes on first build, per the existing comment block. * Reverts #19696's Docker pin in `coderd/database/dbtestutil/db.go`. Local `pg_dump` (13+) and the `postgres:13` Docker fallback both work again. * Strips `\restrict` / `\unrestrict` lines in `normalizeDump` so `scripts/migrate-test`'s schema comparison is stable across `pg_dump` versions (the token in those lines is randomized per run). `TestNormalizeDumpStripsRestrict` locks the behavior in. * Regenerates with v1.31.1, picking up the version stamp and one upstream correctness fix in `DeleteLicense` ([sqlc-dev/sqlc#4383](https://github.com/sqlc-dev/sqlc/pull/4383): don't shadow the input parameter when scanning a single-column return).
33 lines
1.0 KiB
Go
33 lines
1.0 KiB
Go
package dbtestutil
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// Recent pg_dump versions (13.22+ / 14.19+ / 15.14+ / 16.10+ / 17.6+) emit
|
|
// psql meta-commands at the head and tail of the dump that aren't valid SQL.
|
|
// normalizeDump is expected to strip them so downstream consumers (sqlc,
|
|
// schema-equality checks in scripts/migrate-test) don't have to.
|
|
//
|
|
// See https://github.com/coder/internal/issues/965.
|
|
func TestNormalizeDumpStripsRestrict(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
// Raw string literals (backticks) make backslashes literal, so the
|
|
// meta-command here matches what pg_dump actually emits.
|
|
input := []byte(`-- header
|
|
\restrict XYZ
|
|
|
|
CREATE TABLE foo;
|
|
|
|
\unrestrict XYZ
|
|
`)
|
|
|
|
out := string(normalizeDump(input))
|
|
require.NotContains(t, out, `\restrict`, `normalizeDump must strip \restrict psql meta-command`)
|
|
require.NotContains(t, out, `\unrestrict`, `normalizeDump must strip \unrestrict psql meta-command`)
|
|
require.Contains(t, out, "CREATE TABLE foo;", "normalizeDump must preserve real SQL between the meta-commands")
|
|
}
|