hasura/graphql-engine · error

cannot export metadata from server: %w

Error message

cannot export metadata from server: %w

What it means

During the v2 upgrade the CLI exports metadata from the running server via projectmetadata.NewHandlerFromEC(ec).ExportMetadata(). This fails when the server API call errors: bad endpoint, auth failure, or server unable to reach its own metadata database.

Source

Thrown at cli/commands/scripts_update_config_v2.go:447

			}

			defer func() {
				if err != nil {
					os.RemoveAll(ec.MetadataDir)
				}
			}()
			// set codegen to nil, so that it is not exported in yaml
			ec.Config.ActionConfig.Codegen = nil
			// run metadata export
			ec.Spin("Exporting metadata...")

			var files map[string][]byte

			mdHandler := projectmetadata.NewHandlerFromEC(ec)

			files, err = mdHandler.ExportMetadata()
			if err != nil {
				return errors.E(op, fmt.Errorf("cannot export metadata from server: %w", err))
			}

			ec.Spin("Writing metadata...")

			err = mdHandler.WriteMetadata(files)
			if err != nil {
				return errors.E(op, fmt.Errorf("cannot write metadata: %w", err))
			}

			ec.Spin("Writing new config file...")
			// Read the config from config.yaml
			cfgByt, err := os.ReadFile(ec.ConfigFile)
			if err != nil {
				return errors.E(op, fmt.Errorf("cannot read config file: %w", err))
			}

			var cfg cli.Config

View on GitHub (pinned to 724551b9ae)

Solutions

  1. Confirm the server is up: curl $ENDPOINT/healthz
  2. Pass the correct --endpoint and --admin-secret
  3. Restart the Hasura server if its metadata DB is unhealthy
  4. Re-run the update command once export succeeds manually via metadata API
Defensive patterns

Strategy: try-catch

Validate before calling

// verify server reachable and authed before export
resp, err := http.Get(endpoint + "/healthz")
if err != nil || resp.StatusCode != 200 { log.Fatal("server not ready") }

Try / catch

if err := cmd.Execute(); err != nil {
    if strings.Contains(err.Error(), "cannot export metadata from server") {
        // check endpoint/admin-secret, restart server, retry
    }
}

Prevention

When it happens

Trigger: update-project-v2 with --endpoint pointing to a dead/unreachable server, wrong --admin-secret, TLS mismatch, or a Hasura server whose metadata DB is down.

Common situations: Server container stopped before the CLI step; admin secret rotated; self-signed cert without --insecure-skip-verify; server version too old to answer the export query.

Related errors


AI-assisted analysis of hasura/graphql-engine@724551b9ae (2026-08-28). Data as JSON: /api/errors/34ce6e6fee957469. Report an issue: GitHub.