Yuki Kakegawa
08/03/2026, 5:23 AMkapa.ai
08/03/2026, 5:23 AMNULL for that field. [Schema Change Management]
So by default, you already get the behavior you're describing: no hard error, and NULL imputation for the missing field going forward.
> ⚠️ Note: If the connection is ever cleared or refreshed, the retained column and its historical data will be removed entirely from the destination. [Schema Change Management]
Is It a Breaking Change? A removed column/field is not classified as a breaking change by Airbyte. Only the removal of a cursor or primary key is considered breaking (which pauses the connection immediately). [Schema Change Management]
Getting Notified (Warning Behavior) You can configure the connection to detect and notify you of schema changes without automatically propagating them:
• "Approve all changes myself" — Airbyte detects the change and shows a blue "i" icon on the Schema tab, but continues syncing with the old schema. You manually review and approve changes. [Schema Change Management]
• "Be notified when schema changes occur" — There is also a notification setting on the connection's Settings tab to receive alerts when schema changes are detected. [Schema Change Management]
docs.airbyte.com/assets/images/schema-propagation-options…▾
NULL imputation, and a warning — is essentially what Airbyte provides out of the box, especially when combined with the "Approve all changes myself" or notification settings. image 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help., with interactive elementsYuki Kakegawa
08/03/2026, 5:50 AMkapa.ai
08/03/2026, 5:51 AMField 'column_name' not found in stream 'your_stream'.
To continue syncing this stream, restore access to the field
or refresh the source schema to remove it.
What's happening The expected behavior under Approve all changes myself is:
• Removed columns should not block the sync
• Remaining columns should continue syncing
• Changes should only be applied when you manually approve them
However, in practice, some connector versions (notably source-postgres v3.8.0-rc.11 was cited) have been observed to fail the sync entirely when a column is removed, rather than gracefully continuing. This was escalated to Airbyte's engineering team for triage. [GitHub Issue]
Workaround Until the bug is resolved, the recommended workaround is to manually refresh the source schema and approve the removal of the deleted column:
1. Go to Connections → select your connection → Schema tab
2. Click Refresh source schema
3. Review the detected changes and click Save changes
This will update Airbyte's catalog to reflect the column removal, and subsequent syncs should no longer fail on that missing field. [Schema Change Management]
If you're an Airbyte Cloud customer, it's worth opening a support ticket referencing the issue above. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Yuki Kakegawa
08/03/2026, 5:53 AMkapa.ai
08/03/2026, 5:54 AMALTER (like dropping a column) won't appear in the logs and can cause mismatches between what Airbyte expects and what the source provides. [CDC Limitations]
Does "Approve all changes myself" still apply? The schema change management settings still apply, but the recommended approach for CDC is actually to use Approve all changes myself specifically to prevent unreviewed changes from being applied without a proper snapshot first. [CDC Limitations]
However, the bug described in the previous answer — where syncs fail on column removal even under Approve all changes myself — still applies on top of this. [GitHub Issue]
Recommended Steps for CDC + Removed Column 1. Refresh the source schema in the Airbyte UI (Schema tab → Refresh source schema)
2. Review and approve the column removal
3. Trigger a stream refresh on the affected stream to re-snapshot it
4. Resume syncing
This is the safest path to avoid further failures when schema changes occur in a CDC-enabled Postgres source. [Postgres Troubleshooting] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Yuki Kakegawa
08/03/2026, 6:02 AMkapa.ai
08/03/2026, 6:02 AMApprove all changes myself under Detect and propagate schema changes to prevent newly added detected changes from being included in the sync without a proper snapshot, reducing the risk of LSN issues and sync failures.
[CDC Limitations]
So despite the bug you encountered, "Approve all changes myself" is still the safest option for CDC — it just currently has a known issue with column removals that requires a manual schema refresh as a workaround. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help., with interactive elementsYuki Kakegawa
08/03/2026, 6:06 AMkapa.ai
08/03/2026, 6:06 AMApprove all changes myself is your best available tool for staying informed about field removals in CDC, but it's not a perfect safety net yet. Pairing it with:
• Schema change notifications (to get alerted quickly)
• Frequent sync schedules (to consume CDC logs regularly) [CDC Limitations]
...gives you the best chance of catching and handling column removals before they cause problems. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Yuki Kakegawa
08/03/2026, 6:12 AMkapa.ai
08/03/2026, 6:12 AMYuki Kakegawa
08/06/2026, 3:25 PMkapa.ai
08/06/2026, 3:25 PMYuki Kakegawa
08/06/2026, 3:28 PMkapa.ai
08/06/2026, 3:28 PMApprove all changes myself, the expected behavior is that syncs continue with the old schema — but instead, the connector throws a hard error like:
Field 'column_name' not found in stream 'your_stream'.
To continue syncing this stream, restore access to the field
or refresh the source schema to remove it.
[GitHub Issue]
Why It's Worse with CDC With CDC specifically, there is a mismatch between:
• Airbyte's catalog — which still expects the old column to exist
• The WAL logs — which no longer contain that column since it was dropped via ALTER TABLE
Since `ALTER`/`TRUNCATE` changes do not appear in the WAL logs, Airbyte's CDC layer can get confused when it encounters records that don't match the schema it has stored in its catalog. [Postgres Troubleshooting]
What's Missing The knowledge sources do not go deeper into the internal connector code to explain exactly why the connector raises a hard failure rather than gracefully handling the mismatch. This would likely require reviewing the connector source code or waiting for an official response on the open GitHub issue. [GitHub Issue] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Yuki Kakegawa
08/06/2026, 4:04 PMkapa.ai
08/06/2026, 4:04 PMApprove all changes myself, a removed field is detected but held for your review. The sync continues using the old catalog — the removed column just gets NULL values — and nothing breaks until you explicitly approve the change in the UI. [Schema Change Management]
Why CDC Breaks This Expectation With CDC + Postgres, the connector is reading from the WAL logs rather than querying the table directly. When a column is dropped via `ALTER TABLE`:
• The change does not appear in the WAL logs [Postgres Troubleshooting]
• Airbyte's catalog still expects the column to exist
• When the CDC layer processes log events and can't reconcile the catalog against what it's reading, it hard fails rather than gracefully continuing
So the fundamental issue is that CDC's reliance on WAL logs makes it much less tolerant of schema mismatches compared to standard replication, where Airbyte can simply query the table and handle missing columns gracefully.
In Short The knowledge sources don't provide full details on whether this is purely a bug or partially expected CDC behavior, but the practical outcome is the same — CDC makes the "hold until approved" safety net much less reliable. [GitHub Issue] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help., with interactive elementsYuki Kakegawa
08/06/2026, 4:05 PMkapa.ai
08/06/2026, 4:05 PMFail sync, setting this to Re-sync data means the connector will attempt a full re-snapshot instead of hard failing. The trade-off is cost and time for large tables. [GitHub Issue]
3. Downgrade the connector version
Some community members found that downgrading to source-postgres v3.6.18 or v3.6.15 avoided several CDC-related failures, though this is not specific to schema changes and comes with its own trade-offs of missing newer fixes. [GitHub Issue]
Honest Caveat The knowledge sources do not contain a community-proposed patch specifically for the schema change + CDC column removal failure bug. The GitHub issue was escalated to Airbyte's engineering team but no community-developed fix is documented. [GitHub Issue]
Your best bet for an up-to-date community discussion would be the Airbyte Community Slack or monitoring the open GitHub issue directly for engineering updates. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Yuki Kakegawa
08/06/2026, 4:22 PMkapa.ai
08/06/2026, 4:23 PMApprove all changes myself where removed columns retain NULL values, auto-propagation may remove the column entirely from the destination [Schema Change Management]
Bottom Line It trades sync stability for data safety, which for CDC is generally the wrong trade-off. The knowledge sources consistently point to Approve all changes myself as the recommended setting for CDC, despite its current bug with column removals. [CDC Limitations] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help., with interactive elementsYuki Kakegawa
08/06/2026, 4:27 PMkapa.ai
08/06/2026, 4:28 PMPropagate field changes only in that sense. [Backfill Setting]
2. CDC already struggles with new columns without snapshots
As discussed, new columns in CDC need to be snapshotted first before CDC can track them. The backfill option essentially forces a full stream re-sync, which is similar to a snapshot — but the knowledge sources do not confirm this is handled safely in CDC mode. [CDC Limitations]
3. Increased destination costs
Backfilling re-syncs the entire stream every time a new or renamed column is detected, which can be expensive for large tables. [Backfill Setting]
4. Compounds existing CDC risks
Given that Propagate field changes only already carries data loss and LSN risks on CDC, adding automatic full stream re-syncs on top of that increases the surface area for something going wrong.
Bottom Line The knowledge sources do not explicitly address this combination for CDC, so I'd be cautious about recommending it confidently. If you do go this route, testing on a non-critical stream first would be advisable before applying it broadly. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help., with interactive elementsYuki Kakegawa
08/06/2026, 5:23 PMkapa.ai
08/06/2026, 5:23 PM-- Set WAL retention size (in MB, 0 = disabled by default)
ALTER SYSTEM SET wal_keep_size = '<size_in_mb>';
SELECT pg_reload_conf();
Postgres < 13
-- Set number of WAL segments to retain
ALTER SYSTEM SET wal_keep_segments = '<number_of_segments>';
SELECT pg_reload_conf();
[Postgres Troubleshooting]
What Value Should You Set? Per Airbyte's recommendations:
For example:
• Syncing every 6 hours → minimum 1-2 days (7 days recommended)
• Syncing daily → minimum 2-3 days (7 days recommended)
• Syncing every 3 days → minimum 4-5 days (7 days recommended)
[WAL Retention]
The 7-day recommendation provides the best buffer against unexpected delays or maintenance windows. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help., with interactive elementsYuki Kakegawa
08/06/2026, 5:26 PMPropagate field changes only or Propagate all field and stream changes, schema changes except for breaking changes are automatically applied to the ensuing sync and the data in the destination will automatically shift as schema changes are applied."
So removing fields is a breaking change that doesn't get auto propagated?kapa.ai
08/06/2026, 5:26 PMPropagate field changes only, a removed column should be auto-propagated — meaning:
• The column is removed from the destination
• Historical data in that column is lost
• No manual approval required
This is actually consistent with the data loss bug reported in the GitHub issue, where a column removal under propagation settings caused the column to be completely dropped from Snowflake rather than retained. [GitHub Issue]
The Contradiction You're Sensing The confusion likely comes from the fact that:
• The docs say removed columns are retained with NULL values [Schema Change Management]
• But in practice with auto-propagation, they appear to get dropped entirely
This contradiction was actually acknowledged in a recent Airbyte PR that attempted to align the documentation, noting the "retain" behavior was the planned/intended behavior but the connector code wasn't fully matching it yet. [GitHub PR]
So in short — field removal is not a breaking change, it will be auto-propagated, and the actual destination behavior is still being stabilized. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Yuki Kakegawa
08/06/2026, 11:19 PMkapa.ai
08/06/2026, 11:19 PMYuki Kakegawa
08/07/2026, 10:51 PMkapa.ai
08/07/2026, 10:51 PMYuki Kakegawa
08/07/2026, 10:52 PMkapa.ai
08/07/2026, 10:52 PMYuki Kakegawa
08/07/2026, 10:54 PMkapa.ai
08/07/2026, 10:54 PMSELECT pg_create_logical_replication_slot('airbyte_slot', 'pgoutput');
3. Run a full connection-level refresh — this resets the shared CDC state and re-snapshots all tables [Refreshing Your Data]
One Additional Caveat If your connection has orphaned stream states (streams previously removed from the catalog), the connection-level refresh may not fully reset the shared CDC state, leaving the stale LSN in place. In that case you'd need to manually overwrite the state via the API:
POST /api/v1/state/create_or_update
{
"connectionId": "...",
"connectionState": {
"stateType": "global",
"connectionId": "...",
"globalState": { "shared_state": {}, "streamStates": [] }
}
}
[GitHub Issue]
This is the most reliable way to fully reset the CDC state when the replication slot has been wiped. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Yuki Kakegawa
08/07/2026, 10:58 PMkapa.ai
08/07/2026, 10:58 PMYuki Kakegawa
08/08/2026, 1:05 AMkapa.ai
08/08/2026, 1:05 AMPOST /api/v1/state/create_or_update
{
"connectionId": "...",
"connectionState": {
"stateType": "global",
"connectionId": "...",
"globalState": { "shared_state": {}, "streamStates": [] }
}
}
[GitHub Issue]
2. Then run a full connection-level refresh to re-snapshot all tables
On Ignoring WAL Logs The knowledge sources do not explicitly confirm that "Refresh Stream" bypasses WAL logs entirely. What is known is that:
• The initial snapshot in CDC is always a full SELECT — effectively a Full Refresh that doesn't use WAL [CDC Overview]
• Subsequent syncs after the snapshot resume from the WAL position stored in the shared state
So if the shared state LSN is not cleared, even after a refresh snapshot completes, the next incremental sync would still attempt to resume from the old WAL position — which could fail if the replication slot was wiped. This is why wiping the state is critical in your scenario. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Yuki Kakegawa
08/08/2026, 1:10 AMkapa.ai
08/08/2026, 1:10 AMdocs.airbyte.com/assets/images/airbyte_connection_update_state…▾
{
"stateType": "global",
"globalState": {
"shared_state": {},
"streamStates": []
}
}
[GitHub Issue]
⚠️ Important Warnings > "Updates to connection state should be handled with extreme care. Updates may break your syncs, requiring a full historical sync of your data to fix. Make changes only as directed by the Airbyte team."
[Modifying Connection State]
A few things to be aware of:
• The UI state editor has a known issue where setting a stream state to null can cause a schema validation error on the next sync [GitHub Issue]
• Setting streamStates to [] (empty array) rather than nulling individual streams is the safer approach
• After wiping the state, immediately run a full connection refresh to re-snapshot all tables before the next scheduled sync kicks in image 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Yuki Kakegawa
08/08/2026, 1:12 AMkapa.ai
08/08/2026, 1:12 AM{
"shared_state": {
"state": {
"[\"prod-api\",{\"server\":\"prod-api\"}]": "{\"lsn_proc\":568767733426536,\"messageType\":\"DELETE\",\"lsn_commit\":568767733409952,\"lsn\":568767733426536,\"txId\":3942970431,\"ts_usec\":1786147274645245}"
}
},
"streamStates": []
}
This is the Debezium offset stored as the global shared state — it contains:
• lsn — the Log Sequence Number Airbyte last processed
• lsn_proc — the LSN of the last processed event
• lsn_commit — the LSN of the last committed transaction
• txId — the transaction ID
• ts_usec — timestamp in microseconds
• messageType — the last CDC event type (in your case a DELETE)
[Postgres CDC Operations]
Why Stream States Are Empty This is because CDC uses a Global state type where:
• The shared state (LSN position) tracks where Airbyte is in the WAL log — shared across all streams
• Individual stream states are largely unnecessary since all streams are tracked via the single WAL position
[Airbyte Protocol State Types]
To Wipe This for a Full Refresh Based on your earlier scenario of needing a full re-snapshot, you'd want to replace this entire state with:
{
"stateType": "global",
"globalState": {
"shared_state": {},
"streamStates": []
}
}
This clears the LSN position, forcing Airbyte to treat the next sync as a cold start and re-snapshot all tables from scratch. [GitHub Issue] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Yuki Kakegawa
08/08/2026, 1:15 AMkapa.ai
08/08/2026, 1:15 AMts_usec field.
The Challenge To start from "the beginning of this week" in CDC terms, you would theoretically need to:
1. Find the LSN value that corresponds to the start of this week in your Postgres WAL logs
2. Manually set that LSN in the shared state
But the knowledge sources do not confirm whether:
• Airbyte supports manually setting a specific LSN as a starting point
• The ts_usec field in the shared state can be used to control where CDC resumes from
Practical Recommendation This is a question best directed to:
• Airbyte Community Slack for community input
• Airbyte Support if you're on Cloud
As this goes beyond what the available documentation covers for CDC state manipulation. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Yuki Kakegawa
08/08/2026, 2:43 AMkapa.ai
08/08/2026, 2:43 AM{
"stateType": "global",
"globalState": {
"shared_state": {},
"streamStates": []
}
}
[GitHub Issue]
What This Does • shared_state: {} — clears the Debezium offset (your LSN position), forcing a cold start
• streamStates: [] — clears all stream states, including any orphaned ones that could prevent the shared state from being properly reset
Steps in the UI 1. Go to Connections → your connection
2. Click Settings → Advanced
3. Click the Connection State to edit
4. Replace everything with the JSON above
5. Click "Update state"
⚠️ Important After clearing the state:
• Immediately run a full connection refresh before the next scheduled sync kicks in
• The next sync will treat this as a cold start and re-snapshot all tables from scratch
• Do not let the hourly scheduled sync trigger before the refresh — it could write a new broken state
[Modifying Connection State] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Yuki Kakegawa
08/08/2026, 2:44 AM{
"shared_state": {
"state": {
"[\"prod-api\",{\"server\":\"prod-api\"}]": "{\"lsn_proc\":569049015797616,\"messageType\":\"UPDATE\",\"lsn_commit\":569049015367272,\"lsn\":569049015797616,\"txId\":3946386177,\"ts_usec\":1786153642582757}"
}
},
"streamStates": [
{
"streamDescriptor": {
"name": "changes",
"namespace": "billing_audit"
},
"streamState": {}
},
{
"streamDescriptor": {
"name": "account_roles",
"namespace": "public"
},
"streamState": {}kapa.ai
08/08/2026, 2:45 AM{
"stateType": "global",
"globalState": {
"shared_state": {},
"streamStates": []
}
}
[GitHub Issue]
Why the Format Looks Different What you're seeing in the UI is the raw stored state format, but when you update the state via the UI, it expects the Airbyte protocol wrapper format with:
• stateType: "global" — tells Airbyte this is a global CDC state
• globalState — wraps both shared_state and streamStates
What Happens to Your Existing Streams By setting streamStates: [] you are clearing all your existing stream states too, including:
• billing_audit.changes
• public.account_roles
• Any other streams in your connection
This is intentional in your case since you want a full re-snapshot from scratch. After updating the state, remember to:
1. Pause scheduled syncs immediately
2. Run a full connection refresh before the next hourly sync triggers
[Modifying Connection State] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Yuki Kakegawa
08/08/2026, 8:40 PMkapa.ai
08/08/2026, 8:40 PMPOST /v1/jobs endpoint currently only supports:
• sync
• reset
And explicitly rejects jobType=REFRESH with "Refreshes are not supported in the public API" — meaning even a single stream refresh via the public API is not currently supported. [GitHub Issue]
The Gap This is actually an open issue that has been escalated to Airbyte's engineering team. A community member noted that the internal machinery for refreshes already exists and is what the UI calls — but it's simply not wired to the public API yet. [GitHub Issue]
Your Options Right Now 1. UI only — do per-stream refreshes manually one by one via the UI
2. Full connection refresh — if doing them one by one is too inefficient and you need all streams refreshed anyway, a full connection-level refresh may be the pragmatic choice despite being more disruptive
3. Monitor the GitHub issue — there is active discussion about adding REFRESH support to the public API, including multi-stream support [GitHub Issue]
Recommendation Given your scenario where the replication slot was wiped and you need everything refreshed anyway, a full connection refresh after clearing the shared state is likely your most practical path forward right now, rather than waiting for per-stream API support to be implemented. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.