Skip to content

fix(pg-delta): declarative apply error results#5082

Draft
avallete wants to merge 1 commit intodevelopfrom
fix/db-declarative-export-pgmq
Draft

fix(pg-delta): declarative apply error results#5082
avallete wants to merge 1 commit intodevelopfrom
fix/db-declarative-export-pgmq

Conversation

@avallete
Copy link
Copy Markdown
Member

What kind of change does this PR introduce?

  • Improve readability report for decalrative appy errors wrapping

Before:

failed to parse pg-delta apply output: json: cannot unmarshal object into Go struct field ApplyResult.stuckStatements of type string                                                                  stdout: {"status":"stuck","totalStatements":15,"totalRounds":2,"totalApplied":10,"totalSkipped":0,"errors":[],"stuckStatements":[{"statement":{"id":"cluster/extensions/pgmq.sql:0","sql":"CREATE EXTENSION pgmq WITH SCHEMA pgmq;","statementClass":"CREATE_EXTENSION"},"code":"3F000","message":"schema \"pgmq\" does not exist","isDependencyError":true},{"statement":{"id":"schemas/public/functions/pgmq_read.sql:0","sql":"CREATE FUNCTION public.pgmq_read (\n  queue_name    text,\n  sleep_seconds integer DEFAULT 0,\n  n             integer DEFAULT 1\n)\n  RETURNS SETOF pgmq.message_record\n  LANGUAGE plpgsql\n  SECURITY DEFINER\n  SET search_path TO 'pgmq'\n  AS $function$\nBEGIN\n    -- Validate input parameters\n    IF queue_name IS NULL OR queue_name = '' THEN\n        RAISE EXCEPTION 'queue_name cannot be null or empty';\n    END IF;\n    \n    IF sleep_seconds IS NULL OR sleep_seconds < 0 THEN\n        RAISE EXCEPTION 'sleep_seconds must be non-negative, got: %', sleep_seconds;\n    END IF;\n    \n    IF n IS NULL OR n <= 0 THEN\n        RAISE EXCEPTION 'n must be a positive integer, got: %', n;\n    END IF;\n    \n    RETURN QUERY\n    SELECT * FROM pgmq.read(queue_name, sleep_seconds, n);\nEND;\n$function$;","statementClass":"CREATE_FUNCTION"},"code":"3F000","message":"schema \"pgmq\" does not exist","isDependencyError":true},{"statement":{"id":"schemas/public/functions/pgmq_read.sql:1","sql":"GRANT ALL ON FUNCTION public.pgmq_read(text, integer, integer) TO anon;","statementClass":"GRANT"},"code":"42883","message":"function public.pgmq_read(text, integer, integer) does not exist","isDependencyError":true},{"statement":{"id":"schemas/public/functions/pgmq_read.sql:2","sql":"GRANT ALL ON FUNCTION public.pgmq_read(text, integer, integer) TO authenticated;","statementClass":"GRANT"},"code":"42883","message":"function public.pgmq_read(text, integer, integer) does not exist","isDependencyError":true},{"statement":{"id":"schemas/public/functions/pgmq_read.sql:3","sql":"GRANT ALL ON FUNCTION public.pgmq_read(text, integer, integer) TO service_role;","statementClass":"GRANT"},"code":"42883","message":"function public.pgmq_read(text, integer, integer) does not exist","isDependencyError":true}]}

After:

Applying declarative schemas via pg-delta...
pg-delta apply returned status "stuck".
28/33 statements applied in 2 round(s); 0 skipped.
Stuck statements:
- cluster/extensions/pgmq.sql:0 [CREATE_EXTENSION]
  schema "pgmq" does not exist (SQLSTATE 3F000, dependency error)
  SQL: CREATE EXTENSION pgmq WITH SCHEMA pgmq;
- schemas/public/functions/pgmq_read.sql:0 [CREATE_FUNCTION]
  schema "pgmq" does not exist (SQLSTATE 3F000, dependency error)
  SQL: CREATE FUNCTION public.pgmq_read ( queue_name text, sleep_seconds integer DEFAULT 0, n integer DEFAULT 1 ) RETURNS SE...
- schemas/public/functions/pgmq_read.sql:1 [GRANT]
  function public.pgmq_read(text, integer, integer) does not exist (SQLSTATE 42883, dependency error)
  SQL: GRANT ALL ON FUNCTION public.pgmq_read(text, integer, integer) TO anon;
- schemas/public/functions/pgmq_read.sql:2 [GRANT]
  function public.pgmq_read(text, integer, integer) does not exist (SQLSTATE 42883, dependency error)
  SQL: GRANT ALL ON FUNCTION public.pgmq_read(text, integer, integer) TO authenticated;
- schemas/public/functions/pgmq_read.sql:3 [GRANT]
  function public.pgmq_read(text, integer, integer) does not exist (SQLSTATE 42883, dependency error)
  SQL: GRANT ALL ON FUNCTION public.pgmq_read(text, integer, integer) TO service_role;

Debug information saved to supabase/.temp/pgdelta/debug/20260414-163345

To report this issue, you can:
  1. Open an issue at https://github.com/supabase/pg-toolbelt/issues
     Attach the files from the debug folder above.
  2. Open a support ticket at https://supabase.com/dashboard/support
     (only visible to Supabase employees)

WARNING: The debug folder may contain sensitive information about your
database schema, including table structures, function definitions, and role
configurations. Review the contents carefully before sharing publicly.
If unsure, prefer opening a support ticket (option 2) instead.
  • Upgrade pg-delta to resolve the error with pgmq

Fixes #5080

Improve readability report for decalrative appy errors wrapping
@coveralls
Copy link
Copy Markdown

Coverage Report for CI Build 24411025626

Coverage decreased (-0.04%) to 63.733%

Details

  • Coverage decreased (-0.04%) from the base build.
  • Patch coverage: 42 uncovered changes across 1 file (54 of 96 lines covered, 56.25%).
  • 5 coverage regressions across 1 file.

Uncovered Changes

File Changed Covered %
internal/pgdelta/apply.go 96 54 56.25%

Coverage Regressions

5 previously-covered lines in 1 file lost coverage.

File Lines Losing Coverage Coverage
internal/utils/git.go 5 57.14%

Coverage Stats

Coverage Status
Relevant Lines: 15452
Covered Lines: 9848
Line Coverage: 63.73%
Coverage Strength: 6.99 hits per line

💛 - Coveralls

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

declarative: When pgmq is enabled, the declarative schema generate and sync commands fail.

2 participants