Skip to main content
When a pipeline misbehaves, the fastest path to a fix is almost always the same three moves: check the status, read the logs, watch the live data. This guide turns that into a repeatable diagnosis flow, walks through the most common symptoms end to end, and ends with a reference table of the error messages you are most likely to see in pipeline logs. For project-wide metrics (lag, throughput, checkpoint health), see the health dashboard. For record-level debugging, see Live Inspect.

First checks

Run these in order before digging into a specific symptom. Each step rules out a class of problem.
1

Confirm the CLI is working and you are in the right project

If this fails or reports that you are not logged in, generate an API key and run goldsky login before continuing. If goldsky turbo list reports that the turbo binary is not installed, install the Turbo CLI extension first. A pipeline that “doesn’t exist” is often just a pipeline in a different project.
2

Find the pipeline and check its status

Every pipeline in the current project is listed with its current status. If your pipeline is missing, check the name spelling and the project you are logged into. See pipeline states below for what each status means.
3

Read recent logs

Healthy logs show steady progress lines; unhealthy logs show repeated Execution error lines or the same error recurring across restarts. See reading logs below, and match any error text against the error message reference.
4

Watch live data flow through the pipeline

The Live Inspect TUI shows records as they move through each source, transform, and sink. A healthy pipeline shows records arriving on each node’s tab. A TUI stuck on “Waiting for records…” means nothing is flowing. Jump to no data is arriving.
Once you know the status and have logs in hand, jump to the walkthrough that matches your symptom.

Pipeline states

goldsky turbo list reports one of these statuses for each pipeline:
Job-mode pipelines (job: true) cannot be restarted. Delete the job and re-apply the YAML instead. They are auto-deleted about 1 hour after termination, whether they succeeded or failed, so capture logs before the cleanup window closes. See the job mode guide.

Reading logs

You do not need to read every line. Scan for these signals: Useful variations when the last 100 lines are not enough:

Diagnosis walkthroughs

Each walkthrough uses eth-transfers as the example pipeline, a streaming pipeline reading ethereum.erc20_transfers and writing to a Postgres sink. Substitute your own pipeline name.

Pipeline is in an error state

Symptom: goldsky turbo list shows the pipeline as error, or it crash-loops between starting and error. What to check: the logs, which almost always name the failing component.
What you’ll see: an Execution error line identifying the root cause. For example, the single most common failure, bad database credentials in a secret:
Fix: for this example, the secret holds a wrong username or password.
  1. Verify the credentials work outside Goldsky, for example with psql 'postgresql://user:pass@host:5432/db'.
  2. Recreate the secret with the corrected connection string. Secrets cannot be edited in place, so delete and create it again under the same name:
  3. Restart the pipeline so it picks up the new secret:
For any other error text, match it against the error message reference below. Connection, schema, resource, and transform failures each have a specific fix. If the logs show a connection or authentication error, also confirm every secret the pipeline references actually exists:
Cross-check each secret_name in your YAML against that list; a misspelled secret_name fails the same way as a missing secret.

No data is arriving

Symptom: the pipeline is running, but the sink table is empty or stopped growing. What to check: whether records are flowing at each hop (source, transform, sink) using Live Inspect in print mode. Start at the source:
What you’ll see: one of two things.
  • No records at all (“Waiting for records…” with nothing printed). If the source uses start_at: latest, the pipeline only sees data created after deployment:
    Combined with a selective filter, it can legitimately take a long time for the first matching record to arrive. To process history instead, change start_at and redeploy. Because apply preserves checkpoints, you need goldsky turbo restart eth-transfers --clear-state (or a renamed source) to make the pipeline re-read from the new starting point.
  • Records at the source but nothing downstream. Move node by node with -n <node-name> until records stop appearing:
    • If records stop after a transform, the transform is filtering everything out. Check the WHERE clause and the exact spelling of the name in FROM: it must match the source key exactly.
    • If records reach the last transform but never hit the sink, check the sink’s from: field points at the node you think it does.
Fix: correct the YAML, run goldsky turbo validate eth-transfers.yaml, then goldsky turbo apply eth-transfers.yaml. Deploy with -i to reopen the inspect TUI and confirm records now reach the sink node.

Output looks wrong

Symptom: data arrives, but rows are duplicated, fields are null or missing, or values don’t match what the transform should produce. What to check: compare a transform’s input against its output. Open the inspect TUI and switch between node tabs, or capture samples of each node for a side-by-side look:
What you’ll see: the actual records the transform emits, which usually makes the bug obvious:
  • Duplicate rows: the primary_key column isn’t unique per record, so upserts collide or multiply. Joins are a common source of accidental fan-out.
  • Missing or null fields: the SQL doesn’t select the column, or a TypeScript transform returns an object missing fields declared in its schema.
  • Wrong values: check for type casts (numeric strings compared as text) and case-sensitive comparisons on address columns.
Fix: edit the transform, validate, and redeploy:
Because apply preserves checkpoints, the corrected logic only applies to new data. To rewrite history through the fixed transform, restart with cleared state:
--clear-state discards all checkpoints and reprocesses from the beginning. Rows already written under the old logic are overwritten only where primary keys match; rows the fixed logic no longer produces will remain in the sink unless you clean them up yourself.

Sink write failures

Symptom: logs show errors mentioning the sink, and lag starts growing. When a sink can’t accept writes, backpressure deliberately slows the whole pipeline rather than dropping data. What to check: the logs, which include the database’s own error text:
What you’ll see: one of a handful of database-side failures. Examples:
Fix: depends on the message. After fixing the database side, the pipeline resumes on its own retries; if it sits in error, nudge it with goldsky turbo restart eth-transfers.

Pipeline is stuck or lagging

Symptom: the pipeline is running and data arrives, but minutes or hours behind the chain tip, or throughput has visibly dropped. What to check: the health dashboard first. Its where to look first flow separates source, pipeline, and sink bottlenecks. In short:
  1. Checkpoint failures non-zero? Check the logs immediately: the pipeline is not durably saving progress.
  2. Block lag growing? Look at sink flush latency next. Growing end-to-end lag is usually a slow sink applying backpressure, not a slow source.
  3. Sinks fast but checkpoint duration high? Tune batching: raise batch_size or lower batch_flush_interval on the sink (see the pipeline configuration reference).
Then confirm from the CLI side:
What you’ll see:
  • out of memory in the logs with periodic restarts: the pipeline is undersized. Raise resource_size (sml) and redeploy.
  • backpressure or lag warnings with high sink flush latency on the dashboard: the sink is the bottleneck. Add indexes for the upsert path, size up the database, or split load across sinks.
  • Steadily processing but far behind after a fresh deploy: a pipeline backfilling history is supposed to show high lag while it catches up. Watch whether lag trends down; only intervene if it doesn’t.
Fix: match the bottleneck: resources (resource_size), batching (batch_size, batch_flush_interval), or the sink database itself. For a transient wedge with no clear cause, a plain restart is safe and keeps checkpoints:
If you suspect checkpoint trouble, you can list the pipeline’s checkpoint entries with goldsky turbo state list eth-transfers to see exactly what state exists (and what --clear-state would remove).

Error message reference

Match text from goldsky turbo logs against these patterns. Grouped by category.

Authentication

Network

Configuration

Storage

Data

Resources

Performance

Transforms

When the CLI itself misbehaves

Two failure modes live in the CLI rather than the pipeline:
  • Commands hang with no output. The update notifier can stall on a failed network check. Disable it for one command to confirm:
    If it still hangs, bound the command with a timeout and check basic connectivity to rule out a network problem:
    If goldsky commands work but turbo subcommands hang, the turbo binary may be corrupted. Remove it and reinstall:
  • “The turbo binary is not installed.” Turbo is a separate CLI extension. Install (or reinstall) it, then verify with goldsky turbo list:
See the Turbo CLI installation guide for details.

Still stuck

If none of the above resolves it, contact support. Including the following up front usually saves a round trip:
  • The pipeline name and project.
  • The pipeline definition: goldsky turbo get my-pipeline.
  • Recent logs with timestamps: goldsky turbo logs my-pipeline --tail 100 --timestamps.
  • The exact error messages you matched (or failed to match) in the reference above, and roughly when the problem started.
Job-mode pipelines are auto-deleted about 1 hour after termination. Capture the definition and logs before they disappear.