Repository: xataio/pgstream
Pull request #249 (2025-04-04 14:13:50)

Validate pg column types with transformer types

github-actions[bot]: ### Merging this branch will **decrease** overall coverage

| Impacted Packages | Coverage Δ | :robot: |
|-------------------|------------|---------|
| github.com/xataio/pgstream/pkg/stream | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers | 89.31% (**-2.09%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask | 89.11% (**-2.73%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync | 91.30% (**-3.08%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer | 55.79% (**-28.34%**) | :skull: :skull:  |

---

<details>

<summary>Coverage by file</summary>

### Changed files (no unit tests)

| Changed File | Coverage Δ | Total | Covered | Missed | :robot: |
|--------------|------------|-------|---------|--------|---------|
| github.com/xataio/pgstream/pkg/stream/stream_run.go | 0.00% (ø) | 155 (+3) | 0 | 155 (+3) |  |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_boolean_transformer.go | 87.50% (**-5.83%**) | 16 (+1) | 14 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_choice_transformer.go | 87.50% (**-3.80%**) | 24 (+1) | 21 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_date_transformer.go | 80.56% (**-2.30%**) | 36 (+1) | 29 | 7 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_firstname_transformer.go | 96.67% (**-3.33%**) | 30 (+1) | 29 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_float_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_integer_transformer.go | 89.13% (**-1.98%**) | 46 (+1) | 41 | 5 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_string_transformer.go | 91.30% (**-4.15%**) | 23 (+1) | 21 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_timestamp_transformer.go | 94.44% (**-2.70%**) | 36 (+1) | 34 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_uuid_transformer.go | 84.21% (**-4.68%**) | 19 (+1) | 16 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/masking_transformer.go | 96.15% (**-3.85%**) | 26 (+1) | 25 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks/mock_transformer.go | 0.00% (ø) | 2 (+1) | 0 | 2 (+1) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_email_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_firstname_transformer.go | 85.71% (**-6.59%**) | 14 (+1) | 12 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_string_transformer.go | 88.24% (**-5.51%**) | 17 (+1) | 15 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/phone_number_transformer.go | 76.60% (**-1.67%**) | 47 (+1) | 36 | 11 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/string_transformer.go | 90.91% (**-9.09%**) | 11 (+1) | 10 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/transformer.go | 97.87% (ø) | 47 | 46 | 1 |  |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer.go | 54.02% (**-31.43%**) | 87 (+32) | 47 | 40 (+32) | :skull: :skull: :skull:  |

_Please note that the "Total", "Covered", and "Missed" counts above refer to ***code statements*** instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code._

### Changed unit test files

- github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_test.go

</details>

github-actions[bot]: ### Merging this branch will **decrease** overall coverage

| Impacted Packages | Coverage Δ | :robot: |
|-------------------|------------|---------|
| github.com/xataio/pgstream/pkg/stream | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/stream/integration | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers | 89.31% (**-2.09%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask | 89.11% (**-2.73%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync | 91.30% (**-3.08%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer | 55.79% (**-28.34%**) | :skull: :skull:  |

---

<details>

<summary>Coverage by file</summary>

### Changed files (no unit tests)

| Changed File | Coverage Δ | Total | Covered | Missed | :robot: |
|--------------|------------|-------|---------|--------|---------|
| github.com/xataio/pgstream/pkg/stream/stream_run.go | 0.00% (ø) | 155 (+3) | 0 | 155 (+3) |  |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_boolean_transformer.go | 87.50% (**-5.83%**) | 16 (+1) | 14 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_choice_transformer.go | 87.50% (**-3.80%**) | 24 (+1) | 21 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_date_transformer.go | 80.56% (**-2.30%**) | 36 (+1) | 29 | 7 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_firstname_transformer.go | 96.67% (**-3.33%**) | 30 (+1) | 29 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_float_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_integer_transformer.go | 89.13% (**-1.98%**) | 46 (+1) | 41 | 5 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_string_transformer.go | 91.30% (**-4.15%**) | 23 (+1) | 21 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_timestamp_transformer.go | 94.44% (**-2.70%**) | 36 (+1) | 34 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_uuid_transformer.go | 84.21% (**-4.68%**) | 19 (+1) | 16 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/masking_transformer.go | 96.15% (**-3.85%**) | 26 (+1) | 25 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks/mock_transformer.go | 0.00% (ø) | 2 (+1) | 0 | 2 (+1) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_email_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_firstname_transformer.go | 85.71% (**-6.59%**) | 14 (+1) | 12 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_string_transformer.go | 88.24% (**-5.51%**) | 17 (+1) | 15 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/phone_number_transformer.go | 76.60% (**-1.67%**) | 47 (+1) | 36 | 11 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/string_transformer.go | 90.91% (**-9.09%**) | 11 (+1) | 10 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/transformer.go | 97.87% (ø) | 47 | 46 | 1 |  |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer.go | 54.02% (**-31.43%**) | 87 (+32) | 47 | 40 (+32) | :skull: :skull: :skull:  |

_Please note that the "Total", "Covered", and "Missed" counts above refer to ***code statements*** instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code._

### Changed unit test files

- github.com/xataio/pgstream/pkg/stream/integration/pg_pg_integration_transformer_test.go
- github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_test.go

</details>

github-actions[bot]: ### Merging this branch will **decrease** overall coverage

| Impacted Packages | Coverage Δ | :robot: |
|-------------------|------------|---------|
| github.com/xataio/pgstream/pkg/stream | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/stream/integration | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers | 89.31% (**-2.09%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask | 89.11% (**-2.73%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync | 91.30% (**-3.08%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer | 55.79% (**-28.34%**) | :skull: :skull:  |

---

<details>

<summary>Coverage by file</summary>

### Changed files (no unit tests)

| Changed File | Coverage Δ | Total | Covered | Missed | :robot: |
|--------------|------------|-------|---------|--------|---------|
| github.com/xataio/pgstream/pkg/stream/stream_run.go | 0.00% (ø) | 155 (+3) | 0 | 155 (+3) |  |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_boolean_transformer.go | 87.50% (**-5.83%**) | 16 (+1) | 14 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_choice_transformer.go | 87.50% (**-3.80%**) | 24 (+1) | 21 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_date_transformer.go | 80.56% (**-2.30%**) | 36 (+1) | 29 | 7 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_firstname_transformer.go | 96.67% (**-3.33%**) | 30 (+1) | 29 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_float_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_integer_transformer.go | 89.13% (**-1.98%**) | 46 (+1) | 41 | 5 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_string_transformer.go | 91.30% (**-4.15%**) | 23 (+1) | 21 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_timestamp_transformer.go | 94.44% (**-2.70%**) | 36 (+1) | 34 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_uuid_transformer.go | 84.21% (**-4.68%**) | 19 (+1) | 16 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/masking_transformer.go | 96.15% (**-3.85%**) | 26 (+1) | 25 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks/mock_transformer.go | 0.00% (ø) | 2 (+1) | 0 | 2 (+1) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_email_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_firstname_transformer.go | 85.71% (**-6.59%**) | 14 (+1) | 12 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_string_transformer.go | 88.24% (**-5.51%**) | 17 (+1) | 15 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/phone_number_transformer.go | 76.60% (**-1.67%**) | 47 (+1) | 36 | 11 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/string_transformer.go | 90.91% (**-9.09%**) | 11 (+1) | 10 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/transformer.go | 97.87% (ø) | 47 | 46 | 1 |  |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer.go | 54.02% (**-31.43%**) | 87 (+32) | 47 | 40 (+32) | :skull: :skull: :skull:  |

_Please note that the "Total", "Covered", and "Missed" counts above refer to ***code statements*** instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code._

### Changed unit test files

- github.com/xataio/pgstream/pkg/stream/integration/pg_pg_integration_transformer_test.go
- github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_test.go

</details>

github-actions[bot]: ### Merging this branch will **decrease** overall coverage

| Impacted Packages | Coverage Δ | :robot: |
|-------------------|------------|---------|
| github.com/xataio/pgstream/pkg/stream | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/stream/integration | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers | 89.31% (**-2.09%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask | 89.11% (**-2.73%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync | 91.30% (**-3.08%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer | 55.79% (**-28.34%**) | :skull: :skull:  |

---

<details>

<summary>Coverage by file</summary>

### Changed files (no unit tests)

| Changed File | Coverage Δ | Total | Covered | Missed | :robot: |
|--------------|------------|-------|---------|--------|---------|
| github.com/xataio/pgstream/pkg/stream/stream_run.go | 0.00% (ø) | 155 (+3) | 0 | 155 (+3) |  |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_boolean_transformer.go | 87.50% (**-5.83%**) | 16 (+1) | 14 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_choice_transformer.go | 87.50% (**-3.80%**) | 24 (+1) | 21 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_date_transformer.go | 80.56% (**-2.30%**) | 36 (+1) | 29 | 7 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_firstname_transformer.go | 96.67% (**-3.33%**) | 30 (+1) | 29 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_float_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_integer_transformer.go | 89.13% (**-1.98%**) | 46 (+1) | 41 | 5 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_string_transformer.go | 91.30% (**-4.15%**) | 23 (+1) | 21 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_timestamp_transformer.go | 94.44% (**-2.70%**) | 36 (+1) | 34 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_uuid_transformer.go | 84.21% (**-4.68%**) | 19 (+1) | 16 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/masking_transformer.go | 96.15% (**-3.85%**) | 26 (+1) | 25 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks/mock_transformer.go | 0.00% (ø) | 2 (+1) | 0 | 2 (+1) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_email_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_firstname_transformer.go | 85.71% (**-6.59%**) | 14 (+1) | 12 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_string_transformer.go | 88.24% (**-5.51%**) | 17 (+1) | 15 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/phone_number_transformer.go | 76.60% (**-1.67%**) | 47 (+1) | 36 | 11 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/string_transformer.go | 90.91% (**-9.09%**) | 11 (+1) | 10 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/transformer.go | 97.87% (ø) | 47 | 46 | 1 |  |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer.go | 54.02% (**-31.43%**) | 87 (+32) | 47 | 40 (+32) | :skull: :skull: :skull:  |

_Please note that the "Total", "Covered", and "Missed" counts above refer to ***code statements*** instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code._

### Changed unit test files

- github.com/xataio/pgstream/pkg/stream/integration/pg_pg_integration_transformer_test.go
- github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_test.go

</details>

github-actions[bot]: ### Merging this branch will **decrease** overall coverage

| Impacted Packages | Coverage Δ | :robot: |
|-------------------|------------|---------|
| github.com/xataio/pgstream/pkg/stream | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/stream/integration | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers | 89.31% (**-2.09%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask | 89.11% (**-2.73%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync | 91.30% (**-3.08%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer | 76.81% (**-7.32%**) | :thumbsdown: |

---

<details>

<summary>Coverage by file</summary>

### Changed files (no unit tests)

| Changed File | Coverage Δ | Total | Covered | Missed | :robot: |
|--------------|------------|-------|---------|--------|---------|
| github.com/xataio/pgstream/pkg/stream/stream_run.go | 0.00% (ø) | 192 (+40) | 0 | 192 (+40) |  |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_boolean_transformer.go | 87.50% (**-5.83%**) | 16 (+1) | 14 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_choice_transformer.go | 87.50% (**-3.80%**) | 24 (+1) | 21 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_date_transformer.go | 80.56% (**-2.30%**) | 36 (+1) | 29 | 7 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_firstname_transformer.go | 96.67% (**-3.33%**) | 30 (+1) | 29 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_float_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_integer_transformer.go | 89.13% (**-1.98%**) | 46 (+1) | 41 | 5 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_string_transformer.go | 91.30% (**-4.15%**) | 23 (+1) | 21 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_timestamp_transformer.go | 94.44% (**-2.70%**) | 36 (+1) | 34 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_uuid_transformer.go | 84.21% (**-4.68%**) | 19 (+1) | 16 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/masking_transformer.go | 96.15% (**-3.85%**) | 26 (+1) | 25 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks/mock_transformer.go | 0.00% (ø) | 2 (+1) | 0 | 2 (+1) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_email_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_firstname_transformer.go | 85.71% (**-6.59%**) | 14 (+1) | 12 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_string_transformer.go | 88.24% (**-5.51%**) | 17 (+1) | 15 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/phone_number_transformer.go | 76.60% (**-1.67%**) | 47 (+1) | 36 | 11 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/string_transformer.go | 90.91% (**-9.09%**) | 11 (+1) | 10 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/transformer.go | 97.87% (ø) | 47 | 46 | 1 |  |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer.go | 77.05% (**-8.41%**) | 61 (+6) | 47 | 14 (+6) | :thumbsdown: |

_Please note that the "Total", "Covered", and "Missed" counts above refer to ***code statements*** instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code._

### Changed unit test files

- github.com/xataio/pgstream/pkg/stream/integration/pg_pg_integration_transformer_test.go
- github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_test.go

</details>

github-actions[bot]: ### Merging this branch will **decrease** overall coverage

| Impacted Packages | Coverage Δ | :robot: |
|-------------------|------------|---------|
| github.com/xataio/pgstream/pkg/stream | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/stream/integration | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers | 89.31% (**-2.09%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask | 89.11% (**-2.73%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync | 91.30% (**-3.08%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer | 47.32% (**-36.81%**) | :skull: :skull: :skull:  |

---

<details>

<summary>Coverage by file</summary>

### Changed files (no unit tests)

| Changed File | Coverage Δ | Total | Covered | Missed | :robot: |
|--------------|------------|-------|---------|--------|---------|
| github.com/xataio/pgstream/pkg/stream/stream_run.go | 0.00% (ø) | 156 (+4) | 0 | 156 (+4) |  |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_boolean_transformer.go | 87.50% (**-5.83%**) | 16 (+1) | 14 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_choice_transformer.go | 87.50% (**-3.80%**) | 24 (+1) | 21 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_date_transformer.go | 80.56% (**-2.30%**) | 36 (+1) | 29 | 7 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_firstname_transformer.go | 96.67% (**-3.33%**) | 30 (+1) | 29 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_float_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_integer_transformer.go | 89.13% (**-1.98%**) | 46 (+1) | 41 | 5 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_string_transformer.go | 91.30% (**-4.15%**) | 23 (+1) | 21 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_timestamp_transformer.go | 94.44% (**-2.70%**) | 36 (+1) | 34 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_uuid_transformer.go | 84.21% (**-4.68%**) | 19 (+1) | 16 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/masking_transformer.go | 96.15% (**-3.85%**) | 26 (+1) | 25 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks/mock_transformer.go | 0.00% (ø) | 2 (+1) | 0 | 2 (+1) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_email_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_firstname_transformer.go | 85.71% (**-6.59%**) | 14 (+1) | 12 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_string_transformer.go | 88.24% (**-5.51%**) | 17 (+1) | 15 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/phone_number_transformer.go | 76.60% (**-1.67%**) | 47 (+1) | 36 | 11 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/string_transformer.go | 90.91% (**-9.09%**) | 11 (+1) | 10 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/transformer.go | 97.87% (ø) | 47 | 46 | 1 |  |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer.go | 77.05% (**-8.41%**) | 61 (+6) | 47 | 14 (+6) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_validator.go | 0.00% (ø) | 43 (+43) | 0 | 43 (+43) |  |

_Please note that the "Total", "Covered", and "Missed" counts above refer to ***code statements*** instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code._

### Changed unit test files

- github.com/xataio/pgstream/pkg/stream/integration/pg_pg_integration_transformer_test.go
- github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_test.go

</details>

github-actions[bot]: ### Merging this branch will **decrease** overall coverage

| Impacted Packages | Coverage Δ | :robot: |
|-------------------|------------|---------|
| github.com/xataio/pgstream/pkg/stream | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/stream/integration | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers | 89.31% (**-2.09%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask | 89.11% (**-2.73%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync | 91.30% (**-3.08%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer | 51.43% (**-32.70%**) | :skull: :skull: :skull:  |

---

<details>

<summary>Coverage by file</summary>

### Changed files (no unit tests)

| Changed File | Coverage Δ | Total | Covered | Missed | :robot: |
|--------------|------------|-------|---------|--------|---------|
| github.com/xataio/pgstream/pkg/stream/stream_run.go | 0.00% (ø) | 159 (+7) | 0 | 159 (+7) |  |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_boolean_transformer.go | 87.50% (**-5.83%**) | 16 (+1) | 14 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_choice_transformer.go | 87.50% (**-3.80%**) | 24 (+1) | 21 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_date_transformer.go | 80.56% (**-2.30%**) | 36 (+1) | 29 | 7 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_firstname_transformer.go | 96.67% (**-3.33%**) | 30 (+1) | 29 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_float_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_integer_transformer.go | 89.13% (**-1.98%**) | 46 (+1) | 41 | 5 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_string_transformer.go | 91.30% (**-4.15%**) | 23 (+1) | 21 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_timestamp_transformer.go | 94.44% (**-2.70%**) | 36 (+1) | 34 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_uuid_transformer.go | 84.21% (**-4.68%**) | 19 (+1) | 16 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/masking_transformer.go | 96.15% (**-3.85%**) | 26 (+1) | 25 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks/mock_transformer.go | 0.00% (ø) | 2 (+1) | 0 | 2 (+1) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_email_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_firstname_transformer.go | 85.71% (**-6.59%**) | 14 (+1) | 12 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_string_transformer.go | 88.24% (**-5.51%**) | 17 (+1) | 15 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/phone_number_transformer.go | 76.60% (**-1.67%**) | 47 (+1) | 36 | 11 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/string_transformer.go | 90.91% (**-9.09%**) | 11 (+1) | 10 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/transformer.go | 97.87% (ø) | 47 | 46 | 1 |  |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer.go | 80.00% (**-5.45%**) | 60 (+5) | 48 (+1) | 12 (+4) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_validator.go | 0.00% (ø) | 37 (+37) | 0 | 37 (+37) |  |

_Please note that the "Total", "Covered", and "Missed" counts above refer to ***code statements*** instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code._

### Changed unit test files

- github.com/xataio/pgstream/pkg/stream/integration/pg_pg_integration_transformer_test.go
- github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_test.go

</details>

github-actions[bot]: ### Merging this branch will **decrease** overall coverage

| Impacted Packages | Coverage Δ | :robot: |
|-------------------|------------|---------|
| github.com/xataio/pgstream/pkg/stream | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/stream/integration | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers | 89.31% (**-2.09%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask | 89.11% (**-2.73%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync | 91.30% (**-3.08%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer | 51.43% (**-32.70%**) | :skull: :skull: :skull:  |

---

<details>

<summary>Coverage by file</summary>

### Changed files (no unit tests)

| Changed File | Coverage Δ | Total | Covered | Missed | :robot: |
|--------------|------------|-------|---------|--------|---------|
| github.com/xataio/pgstream/pkg/stream/stream_run.go | 0.00% (ø) | 159 (+7) | 0 | 159 (+7) |  |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_boolean_transformer.go | 87.50% (**-5.83%**) | 16 (+1) | 14 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_choice_transformer.go | 87.50% (**-3.80%**) | 24 (+1) | 21 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_date_transformer.go | 80.56% (**-2.30%**) | 36 (+1) | 29 | 7 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_firstname_transformer.go | 96.67% (**-3.33%**) | 30 (+1) | 29 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_float_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_integer_transformer.go | 89.13% (**-1.98%**) | 46 (+1) | 41 | 5 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_string_transformer.go | 91.30% (**-4.15%**) | 23 (+1) | 21 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_timestamp_transformer.go | 94.44% (**-2.70%**) | 36 (+1) | 34 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_uuid_transformer.go | 84.21% (**-4.68%**) | 19 (+1) | 16 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/masking_transformer.go | 96.15% (**-3.85%**) | 26 (+1) | 25 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks/mock_transformer.go | 0.00% (ø) | 2 (+1) | 0 | 2 (+1) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_email_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_firstname_transformer.go | 85.71% (**-6.59%**) | 14 (+1) | 12 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_string_transformer.go | 88.24% (**-5.51%**) | 17 (+1) | 15 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/phone_number_transformer.go | 76.60% (**-1.67%**) | 47 (+1) | 36 | 11 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/string_transformer.go | 90.91% (**-9.09%**) | 11 (+1) | 10 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/transformer.go | 97.87% (ø) | 47 | 46 | 1 |  |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer.go | 80.00% (**-5.45%**) | 60 (+5) | 48 (+1) | 12 (+4) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_validator.go | 0.00% (ø) | 37 (+37) | 0 | 37 (+37) |  |

_Please note that the "Total", "Covered", and "Missed" counts above refer to ***code statements*** instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code._

### Changed unit test files

- github.com/xataio/pgstream/pkg/stream/integration/pg_pg_integration_transformer_test.go
- github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_test.go

</details>

github-actions[bot]: ### Merging this branch will **decrease** overall coverage

| Impacted Packages | Coverage Δ | :robot: |
|-------------------|------------|---------|
| github.com/xataio/pgstream/pkg/stream | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/stream/integration | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers | 89.31% (**-2.09%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask | 89.11% (**-2.73%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync | 91.30% (**-3.08%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer | 47.92% (**-38.62%**) | :skull: :skull: :skull:  |

---

<details>

<summary>Coverage by file</summary>

### Changed files (no unit tests)

| Changed File | Coverage Δ | Total | Covered | Missed | :robot: |
|--------------|------------|-------|---------|--------|---------|
| github.com/xataio/pgstream/pkg/stream/stream_run.go | 0.00% (ø) | 160 (+8) | 0 | 160 (+8) |  |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_boolean_transformer.go | 87.50% (**-5.83%**) | 16 (+1) | 14 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_choice_transformer.go | 87.50% (**-3.80%**) | 24 (+1) | 21 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_date_transformer.go | 80.56% (**-2.30%**) | 36 (+1) | 29 | 7 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_firstname_transformer.go | 96.67% (**-3.33%**) | 30 (+1) | 29 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_float_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_integer_transformer.go | 89.13% (**-1.98%**) | 46 (+1) | 41 | 5 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_string_transformer.go | 91.30% (**-4.15%**) | 23 (+1) | 21 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_timestamp_transformer.go | 94.44% (**-2.70%**) | 36 (+1) | 34 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_uuid_transformer.go | 84.21% (**-4.68%**) | 19 (+1) | 16 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/masking_transformer.go | 96.15% (**-3.85%**) | 26 (+1) | 25 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks/mock_transformer.go | 0.00% (ø) | 2 (+1) | 0 | 2 (+1) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_email_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_firstname_transformer.go | 85.71% (**-6.59%**) | 14 (+1) | 12 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_string_transformer.go | 88.24% (**-5.51%**) | 17 (+1) | 15 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/phone_number_transformer.go | 76.60% (**-1.67%**) | 47 (+1) | 36 | 11 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/string_transformer.go | 90.91% (**-9.09%**) | 11 (+1) | 10 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/transformer.go | 97.87% (ø) | 47 | 46 | 1 |  |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer.go | 80.70% (**-5.84%**) | 57 (+5) | 46 (+1) | 11 (+4) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_validator.go | 0.00% (ø) | 39 (+39) | 0 | 39 (+39) |  |

_Please note that the "Total", "Covered", and "Missed" counts above refer to ***code statements*** instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code._

### Changed unit test files

- github.com/xataio/pgstream/pkg/stream/integration/pg_pg_integration_transformer_test.go
- github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_test.go

</details>

github-actions[bot]: ### Merging this branch will **decrease** overall coverage

| Impacted Packages | Coverage Δ | :robot: |
|-------------------|------------|---------|
| github.com/xataio/pgstream/pkg/stream | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/stream/integration | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers | 89.31% (**-2.09%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask | 89.11% (**-2.73%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync | 91.30% (**-3.08%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer | 82.29% (**-4.25%**) | :thumbsdown: |

---

<details>

<summary>Coverage by file</summary>

### Changed files (no unit tests)

| Changed File | Coverage Δ | Total | Covered | Missed | :robot: |
|--------------|------------|-------|---------|--------|---------|
| github.com/xataio/pgstream/pkg/stream/stream_run.go | 0.00% (ø) | 160 (+8) | 0 | 160 (+8) |  |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_boolean_transformer.go | 87.50% (**-5.83%**) | 16 (+1) | 14 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_choice_transformer.go | 87.50% (**-3.80%**) | 24 (+1) | 21 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_date_transformer.go | 80.56% (**-2.30%**) | 36 (+1) | 29 | 7 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_firstname_transformer.go | 96.67% (**-3.33%**) | 30 (+1) | 29 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_float_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_integer_transformer.go | 89.13% (**-1.98%**) | 46 (+1) | 41 | 5 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_string_transformer.go | 91.30% (**-4.15%**) | 23 (+1) | 21 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_timestamp_transformer.go | 94.44% (**-2.70%**) | 36 (+1) | 34 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_uuid_transformer.go | 84.21% (**-4.68%**) | 19 (+1) | 16 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/masking_transformer.go | 96.15% (**-3.85%**) | 26 (+1) | 25 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks/mock_transformer.go | 0.00% (ø) | 2 (+1) | 0 | 2 (+1) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_email_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_firstname_transformer.go | 85.71% (**-6.59%**) | 14 (+1) | 12 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_string_transformer.go | 88.24% (**-5.51%**) | 17 (+1) | 15 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/phone_number_transformer.go | 76.60% (**-1.67%**) | 47 (+1) | 36 | 11 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/string_transformer.go | 90.91% (**-9.09%**) | 11 (+1) | 10 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/transformer.go | 97.87% (ø) | 47 | 46 | 1 |  |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer.go | 80.70% (**-5.84%**) | 57 (+5) | 46 (+1) | 11 (+4) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_validator.go | 84.62% (**+84.62%**) | 39 (+39) | 33 (+33) | 6 (+6) | :star2: |

_Please note that the "Total", "Covered", and "Missed" counts above refer to ***code statements*** instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code._

### Changed unit test files

- github.com/xataio/pgstream/pkg/stream/integration/pg_pg_integration_transformer_test.go
- github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_test.go
- github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_validator_test.go

</details>

github-actions[bot]: ### Merging this branch will **decrease** overall coverage

| Impacted Packages | Coverage Δ | :robot: |
|-------------------|------------|---------|
| github.com/xataio/pgstream/pkg/stream | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/stream/integration | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers | 89.31% (**-2.09%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask | 89.11% (**-2.73%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync | 91.30% (**-3.08%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer | 82.29% (**-4.25%**) | :thumbsdown: |

---

<details>

<summary>Coverage by file</summary>

### Changed files (no unit tests)

| Changed File | Coverage Δ | Total | Covered | Missed | :robot: |
|--------------|------------|-------|---------|--------|---------|
| github.com/xataio/pgstream/pkg/stream/stream_run.go | 0.00% (ø) | 160 (+8) | 0 | 160 (+8) |  |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_boolean_transformer.go | 87.50% (**-5.83%**) | 16 (+1) | 14 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_choice_transformer.go | 87.50% (**-3.80%**) | 24 (+1) | 21 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_date_transformer.go | 80.56% (**-2.30%**) | 36 (+1) | 29 | 7 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_firstname_transformer.go | 96.67% (**-3.33%**) | 30 (+1) | 29 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_float_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_integer_transformer.go | 89.13% (**-1.98%**) | 46 (+1) | 41 | 5 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_string_transformer.go | 91.30% (**-4.15%**) | 23 (+1) | 21 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_timestamp_transformer.go | 94.44% (**-2.70%**) | 36 (+1) | 34 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_uuid_transformer.go | 84.21% (**-4.68%**) | 19 (+1) | 16 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/masking_transformer.go | 96.15% (**-3.85%**) | 26 (+1) | 25 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks/mock_transformer.go | 0.00% (ø) | 2 (+1) | 0 | 2 (+1) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_email_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_firstname_transformer.go | 85.71% (**-6.59%**) | 14 (+1) | 12 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_string_transformer.go | 88.24% (**-5.51%**) | 17 (+1) | 15 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/phone_number_transformer.go | 76.60% (**-1.67%**) | 47 (+1) | 36 | 11 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/string_transformer.go | 90.91% (**-9.09%**) | 11 (+1) | 10 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/transformer.go | 97.87% (ø) | 47 | 46 | 1 |  |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer.go | 80.70% (**-5.84%**) | 57 (+5) | 46 (+1) | 11 (+4) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_validator.go | 84.62% (**+84.62%**) | 39 (+39) | 33 (+33) | 6 (+6) | :star2: |

_Please note that the "Total", "Covered", and "Missed" counts above refer to ***code statements*** instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code._

### Changed unit test files

- github.com/xataio/pgstream/pkg/stream/integration/pg_pg_integration_transformer_test.go
- github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_test.go
- github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_validator_test.go

</details>

github-actions[bot]: ### Merging this branch will **decrease** overall coverage

| Impacted Packages | Coverage Δ | :robot: |
|-------------------|------------|---------|
| github.com/xataio/pgstream/pkg/stream | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/stream/integration | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers | 89.31% (**-2.09%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask | 89.11% (**-2.73%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks | 0.00% (ø) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync | 91.30% (**-3.08%**) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer | 82.11% (**-4.43%**) | :thumbsdown: |

---

<details>

<summary>Coverage by file</summary>

### Changed files (no unit tests)

| Changed File | Coverage Δ | Total | Covered | Missed | :robot: |
|--------------|------------|-------|---------|--------|---------|
| github.com/xataio/pgstream/pkg/stream/stream_run.go | 0.00% (ø) | 160 (+8) | 0 | 160 (+8) |  |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_boolean_transformer.go | 87.50% (**-5.83%**) | 16 (+1) | 14 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_choice_transformer.go | 87.50% (**-3.80%**) | 24 (+1) | 21 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_date_transformer.go | 80.56% (**-2.30%**) | 36 (+1) | 29 | 7 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_firstname_transformer.go | 96.67% (**-3.33%**) | 30 (+1) | 29 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_float_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_integer_transformer.go | 89.13% (**-1.98%**) | 46 (+1) | 41 | 5 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_string_transformer.go | 91.30% (**-4.15%**) | 23 (+1) | 21 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_timestamp_transformer.go | 94.44% (**-2.70%**) | 36 (+1) | 34 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/greenmask/greenmask_uuid_transformer.go | 84.21% (**-4.68%**) | 19 (+1) | 16 | 3 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/masking_transformer.go | 96.15% (**-3.85%**) | 26 (+1) | 25 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/mocks/mock_transformer.go | 0.00% (ø) | 2 (+1) | 0 | 2 (+1) |  |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_email_transformer.go | 93.33% (**-3.22%**) | 30 (+1) | 28 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_firstname_transformer.go | 85.71% (**-6.59%**) | 14 (+1) | 12 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/neosync/neosync_string_transformer.go | 88.24% (**-5.51%**) | 17 (+1) | 15 | 2 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/phone_number_transformer.go | 76.60% (**-1.67%**) | 47 (+1) | 36 | 11 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/string_transformer.go | 90.91% (**-9.09%**) | 11 (+1) | 10 | 1 (+1) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/transformers/transformer.go | 97.87% (ø) | 47 | 46 | 1 |  |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer.go | 80.70% (**-5.84%**) | 57 (+5) | 46 (+1) | 11 (+4) | :thumbsdown: |
| github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_validator.go | 84.21% (**+84.21%**) | 38 (+38) | 32 (+32) | 6 (+6) | :star2: |

_Please note that the "Total", "Covered", and "Missed" counts above refer to ***code statements*** instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code._

### Changed unit test files

- github.com/xataio/pgstream/pkg/stream/integration/pg_pg_integration_transformer_test.go
- github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_test.go
- github.com/xataio/pgstream/pkg/wal/processor/transformer/wal_transformer_validator_test.go

</details>


Patch:
diff --git a/pkg/stream/stream_run.go b/pkg/stream/stream_run.go
index f69bf1b..1aede7c 100644
--- a/pkg/stream/stream_run.go
+++ b/pkg/stream/stream_run.go
@@ -221,11 +221,25 @@ func Run(ctx context.Context, logger loglib.Logger, config *Config, instrumentat
 
 	if config.Processor.Transformer != nil {
 		logger.Info("adding transformation layer to processor...")
-		transformer, err := transformer.New(config.Processor.Transformer, processor, transformer.WithLogger(logger))
+		opts := []transformer.Option{transformer.WithLogger(logger)}
+		// if a source pg url is provided, use it to validate the transformer
+		pgURL := ""
+		switch {
+		case config.Listener.Postgres != nil:
+			pgURL = config.Listener.Postgres.Replication.PostgresURL
+		case config.Listener.Snapshot != nil:
+			pgURL = config.Listener.Snapshot.Generator.URL
+		}
+		if pgURL != "" {
+			pgValidator := transformer.NewPostgresTransformerValidator(pgURL)
+			opts = append(opts, transformer.WithValidator(pgValidator.Validate))
+		}
+		transformer, err := transformer.New(ctx, config.Processor.Transformer, processor, opts...)
 		if err != nil {
 			logger.Error(err, "creating transformer layer")
 			return err
 		}
+
 		processor = transformer
 	}
 
diff --git a/pkg/transformers/greenmask/greenmask_boolean_transformer.go b/pkg/transformers/greenmask/greenmask_boolean_transformer.go
index f230bf3..1db2487 100644
--- a/pkg/transformers/greenmask/greenmask_boolean_transformer.go
+++ b/pkg/transformers/greenmask/greenmask_boolean_transformer.go
@@ -42,3 +42,10 @@ func (bt *BooleanTransformer) Transform(value transformers.Value) (any, error) {
 	}
 	return bool(ret), nil
 }
+
+func (bt *BooleanTransformer) CompatibleTypes() []transformers.SupportedDataType {
+	return []transformers.SupportedDataType{
+		transformers.BooleanDataType,
+		transformers.ByteArrayDataType,
+	}
+}
diff --git a/pkg/transformers/greenmask/greenmask_choice_transformer.go b/pkg/transformers/greenmask/greenmask_choice_transformer.go
index 801ae72..1a2f5fa 100644
--- a/pkg/transformers/greenmask/greenmask_choice_transformer.go
+++ b/pkg/transformers/greenmask/greenmask_choice_transformer.go
@@ -63,3 +63,10 @@ func (t *ChoiceTransformer) Transform(value transformers.Value) (any, error) {
 
 	return ret.Data, nil
 }
+
+func (t *ChoiceTransformer) CompatibleTypes() []transformers.SupportedDataType {
+	return []transformers.SupportedDataType{
+		transformers.ByteArrayDataType,
+		transformers.StringDataType,
+	}
+}
diff --git a/pkg/transformers/greenmask/greenmask_date_transformer.go b/pkg/transformers/greenmask/greenmask_date_transformer.go
index f1599bc..c8f9d60 100644
--- a/pkg/transformers/greenmask/greenmask_date_transformer.go
+++ b/pkg/transformers/greenmask/greenmask_date_transformer.go
@@ -81,3 +81,11 @@ func (t *DateTransformer) Transform(value transformers.Value) (any, error) {
 
 	return time.Date(result.Year(), result.Month(), result.Day(), 0, 0, 0, 0, time.UTC), nil
 }
+
+func (t *DateTransformer) CompatibleTypes() []transformers.SupportedDataType {
+	return []transformers.SupportedDataType{
+		transformers.DateDataType,
+		transformers.ByteArrayDataType,
+		transformers.StringDataType,
+	}
+}
diff --git a/pkg/transformers/greenmask/greenmask_firstname_transformer.go b/pkg/transformers/greenmask/greenmask_firstname_transformer.go
index d7f3f5f..e7e0762 100644
--- a/pkg/transformers/greenmask/greenmask_firstname_transformer.go
+++ b/pkg/transformers/greenmask/greenmask_firstname_transformer.go
@@ -78,3 +78,10 @@ func toGreenmaskGender(gender string) string {
 		return greenmasktransformers.AnyGenderName
 	}
 }
+
+func (fnt *FirstNameTransformer) CompatibleTypes() []transformers.SupportedDataType {
+	return []transformers.SupportedDataType{
+		transformers.StringDataType,
+		transformers.ByteArrayDataType,
+	}
+}
diff --git a/pkg/transformers/greenmask/greenmask_float_transformer.go b/pkg/transformers/greenmask/greenmask_float_transformer.go
index 32a315b..588b751 100644
--- a/pkg/transformers/greenmask/greenmask_float_transformer.go
+++ b/pkg/transformers/greenmask/greenmask_float_transformer.go
@@ -68,6 +68,14 @@ func (ft *FloatTransformer) Transform(value transformers.Value) (any, error) {
 	return float64(ret), nil
 }
 
+func (ft *FloatTransformer) CompatibleTypes() []transformers.SupportedDataType {
+	return []transformers.SupportedDataType{
+		transformers.Float32DataType,
+		transformers.Float64DataType,
+		transformers.ByteArrayDataType,
+	}
+}
+
 func getBytesForFloat(f float64) []byte {
 	var buf [8]byte
 	binary.BigEndian.PutUint64(buf[:], math.Float64bits(f))
diff --git a/pkg/transformers/greenmask/greenmask_integer_transformer.go b/pkg/transformers/greenmask/greenmask_integer_transformer.go
index 7a95962..32121d6 100644
--- a/pkg/transformers/greenmask/greenmask_integer_transformer.go
+++ b/pkg/transformers/greenmask/greenmask_integer_transformer.go
@@ -110,6 +110,22 @@ func (t *IntegerTransformer) Transform(value transformers.Value) (any, error) {
 	return int64(ret), nil
 }
 
+func (t *IntegerTransformer) CompatibleTypes() []transformers.SupportedDataType {
+	return []transformers.SupportedDataType{
+		transformers.Integer8DataType,
+		transformers.UInteger8DataType,
+		transformers.Integer16DataType,
+		transformers.UInteger16DataType,
+		transformers.Integer32DataType,
+		transformers.UInteger32DataType,
+		transformers.Integer64DataType,
+		transformers.UInteger64DataType,
+		transformers.Float32DataType,
+		transformers.Float64DataType,
+		transformers.ByteArrayDataType,
+	}
+}
+
 func minMaxValueForSize(size int) (int, int, error) {
 	switch size {
 	case 2:
diff --git a/pkg/transformers/greenmask/greenmask_string_transformer.go b/pkg/transformers/greenmask/greenmask_string_transformer.go
index 3f262dd..486db66 100644
--- a/pkg/transformers/greenmask/greenmask_string_transformer.go
+++ b/pkg/transformers/greenmask/greenmask_string_transformer.go
@@ -59,3 +59,10 @@ func (st *StringTransformer) Transform(value transformers.Value) (any, error) {
 	ret := st.transformer.Transform(toTransform)
 	return string(ret), nil
 }
+
+func (st *StringTransformer) CompatibleTypes() []transformers.SupportedDataType {
+	return []transformers.SupportedDataType{
+		transformers.StringDataType,
+		transformers.ByteArrayDataType,
+	}
+}
diff --git a/pkg/transformers/greenmask/greenmask_timestamp_transformer.go b/pkg/transformers/greenmask/greenmask_timestamp_transformer.go
index c75ca51..83d84f7 100644
--- a/pkg/transformers/greenmask/greenmask_timestamp_transformer.go
+++ b/pkg/transformers/greenmask/greenmask_timestamp_transformer.go
@@ -81,3 +81,11 @@ func (t *UTCTimestampTransformer) Transform(value transformers.Value) (any, erro
 	}
 	return t.transformer.Transform(nil, toTransform)
 }
+
+func (t *UTCTimestampTransformer) CompatibleTypes() []transformers.SupportedDataType {
+	return []transformers.SupportedDataType{
+		transformers.DatetimeDataType,
+		transformers.ByteArrayDataType,
+		transformers.StringDataType,
+	}
+}
diff --git a/pkg/transformers/greenmask/greenmask_uuid_transformer.go b/pkg/transformers/greenmask/greenmask_uuid_transformer.go
index ee2b452..2cf6da1 100644
--- a/pkg/transformers/greenmask/greenmask_uuid_transformer.go
+++ b/pkg/transformers/greenmask/greenmask_uuid_transformer.go
@@ -46,3 +46,12 @@ func (ut *UUIDTransformer) Transform(value transformers.Value) (any, error) {
 	}
 	return ret, nil
 }
+
+func (ut *UUIDTransformer) CompatibleTypes() []transformers.SupportedDataType {
+	return []transformers.SupportedDataType{
+		transformers.StringDataType,
+		transformers.UUIDDataType,
+		transformers.ByteArrayDataType,
+		transformers.UInt8ArrayOf16DataType,
+	}
+}
diff --git a/pkg/transformers/masking_transformer.go b/pkg/transformers/masking_transformer.go
index b763832..ed2cfca 100644
--- a/pkg/transformers/masking_transformer.go
+++ b/pkg/transformers/masking_transformer.go
@@ -87,3 +87,10 @@ func (t *MaskingTransformer) Transform(value Value) (any, error) {
 		return nil, ErrUnsupportedValueType
 	}
 }
+
+func (t *MaskingTransformer) CompatibleTypes() []SupportedDataType {
+	return []SupportedDataType{
+		StringDataType,
+		ByteArrayDataType,
+	}
+}
diff --git a/pkg/transformers/mocks/mock_transformer.go b/pkg/transformers/mocks/mock_transformer.go
index 3a6e2e2..b778eed 100644
--- a/pkg/transformers/mocks/mock_transformer.go
+++ b/pkg/transformers/mocks/mock_transformer.go
@@ -5,9 +5,14 @@ package mocks
 import "github.com/xataio/pgstream/pkg/transformers"
 
 type Transformer struct {
-	TransformFn func(transformers.Value) (any, error)
+	TransformFn       func(transformers.Value) (any, error)
+	CompatibleTypesFn func() []transformers.SupportedDataType
 }
 
 func (m *Transformer) Transform(val transformers.Value) (any, error) {
 	return m.TransformFn(val)
 }
+
+func (m *Transformer) CompatibleTypes() []transformers.SupportedDataType {
+	return m.CompatibleTypesFn()
+}
diff --git a/pkg/transformers/neosync/neosync_email_transformer.go b/pkg/transformers/neosync/neosync_email_transformer.go
index c71ab56..967a25f 100644
--- a/pkg/transformers/neosync/neosync_email_transformer.go
+++ b/pkg/transformers/neosync/neosync_email_transformer.go
@@ -83,3 +83,9 @@ func NewEmailTransformer(params transformers.Parameters) (*EmailTransformer, err
 		transformer: New[string](neosynctransformers.NewTransformEmail(), opts),
 	}, nil
 }
+
+func (t *EmailTransformer) CompatibleTypes() []transformers.SupportedDataType {
+	return []transformers.SupportedDataType{
+		transformers.StringDataType,
+	}
+}
diff --git a/pkg/transformers/neosync/neosync_firstname_transformer.go b/pkg/transformers/neosync/neosync_firstname_transformer.go
index 2c39e74..8eaaece 100644
--- a/pkg/transformers/neosync/neosync_firstname_transformer.go
+++ b/pkg/transformers/neosync/neosync_firstname_transformer.go
@@ -38,3 +38,9 @@ func NewFirstNameTransformer(params transformers.Parameters) (*FirstNameTransfor
 		transformer: New[string](neosynctransformers.NewTransformFirstName(), opts),
 	}, nil
 }
+
+func (t *FirstNameTransformer) CompatibleTypes() []transformers.SupportedDataType {
+	return []transformers.SupportedDataType{
+		transformers.StringDataType,
+	}
+}
diff --git a/pkg/transformers/neosync/neosync_string_transformer.go b/pkg/transformers/neosync/neosync_string_transformer.go
index 1081d7a..5c0860e 100644
--- a/pkg/transformers/neosync/neosync_string_transformer.go
+++ b/pkg/transformers/neosync/neosync_string_transformer.go
@@ -43,3 +43,9 @@ func NewStringTransformer(params transformers.Parameters) (*StringTransformer, e
 		transformer: New[string](neosynctransformers.NewTransformString(), opts),
 	}, nil
 }
+
+func (t *StringTransformer) CompatibleTypes() []transformers.SupportedDataType {
+	return []transformers.SupportedDataType{
+		transformers.StringDataType,
+	}
+}
diff --git a/pkg/transformers/phone_number_transformer.go b/pkg/transformers/phone_number_transformer.go
index e51d84f..da0bbe5 100644
--- a/pkg/transformers/phone_number_transformer.go
+++ b/pkg/transformers/phone_number_transformer.go
@@ -108,3 +108,10 @@ func (t *PhoneNumberTransformer) transform(value []byte) (string, error) {
 
 	return string(b[:targetLen]), nil
 }
+
+func (t *PhoneNumberTransformer) CompatibleTypes() []SupportedDataType {
+	return []SupportedDataType{
+		StringDataType,
+		ByteArrayDataType,
+	}
+}
diff --git a/pkg/transformers/string_transformer.go b/pkg/transformers/string_transformer.go
index bc77392..940581a 100644
--- a/pkg/transformers/string_transformer.go
+++ b/pkg/transformers/string_transformer.go
@@ -38,3 +38,10 @@ func (st *StringTransformer) transform(str string) string {
 	}
 	return string(b)
 }
+
+func (st *StringTransformer) CompatibleTypes() []SupportedDataType {
+	return []SupportedDataType{
+		StringDataType,
+		ByteArrayDataType,
+	}
+}
diff --git a/pkg/transformers/transformer.go b/pkg/transformers/transformer.go
index bec6e9b..e2b8a1e 100644
--- a/pkg/transformers/transformer.go
+++ b/pkg/transformers/transformer.go
@@ -9,6 +9,7 @@ import (
 
 type Transformer interface {
 	Transform(Value) (any, error)
+	CompatibleTypes() []SupportedDataType
 }
 
 type Value struct {
@@ -47,6 +48,28 @@ const (
 	Masking                TransformerType = "masking"
 )
 
+type SupportedDataType string
+
+const (
+	ByteArrayDataType      SupportedDataType = "byte_array"
+	StringDataType         SupportedDataType = "string"
+	BooleanDataType        SupportedDataType = "boolean"
+	Integer8DataType       SupportedDataType = "integer8"
+	UInteger8DataType      SupportedDataType = "uinteger8"
+	Integer16DataType      SupportedDataType = "integer16"
+	UInteger16DataType     SupportedDataType = "uinteger16"
+	Integer32DataType      SupportedDataType = "integer32"
+	UInteger32DataType     SupportedDataType = "uinteger32"
+	Integer64DataType      SupportedDataType = "integer64"
+	UInteger64DataType     SupportedDataType = "uinteger64"
+	Float32DataType        SupportedDataType = "float32"
+	Float64DataType        SupportedDataType = "float64"
+	UUIDDataType           SupportedDataType = "uuid"
+	UInt8ArrayOf16DataType SupportedDataType = "uint8_array_of_16"
+	DateDataType           SupportedDataType = "date"
+	DatetimeDataType       SupportedDataType = "datetime"
+)
+
 const (
 	columnDynamicParam = "column"
 )
diff --git a/pkg/wal/processor/transformer/wal_transformer.go b/pkg/wal/processor/transformer/wal_transformer.go
index 9bbdbad..5afb81f 100644
--- a/pkg/wal/processor/transformer/wal_transformer.go
+++ b/pkg/wal/processor/transformer/wal_transformer.go
@@ -5,6 +5,7 @@ package transformer
 import (
 	"context"
 
+	pglib "github.com/xataio/pgstream/internal/postgres"
 	loglib "github.com/xataio/pgstream/pkg/log"
 	"github.com/xataio/pgstream/pkg/transformers"
 	"github.com/xataio/pgstream/pkg/transformers/builder"
@@ -17,10 +18,13 @@ import (
 type Transformer struct {
 	logger         loglib.Logger
 	processor      processor.Processor
-	transformerMap map[string]columnTransformers
+	transformerMap map[string]ColumnTransformers
+	validator      ValidatorFn
 }
 
-type columnTransformers map[string]transformers.Transformer
+type ValidatorFn func(ctx context.Context, transformerMap map[string]ColumnTransformers) error
+
+type ColumnTransformers map[string]transformers.Transformer
 
 type Config struct {
 	TransformerRules []TableRules
@@ -30,7 +34,7 @@ type Option func(t *Transformer)
 
 // New will return a transformer processor wrapper that will transform incoming
 // wal event column values as configured by the transformation rules.
-func New(cfg *Config, processor processor.Processor, opts ...Option) (*Transformer, error) {
+func New(ctx context.Context, cfg *Config, processor processor.Processor, opts ...Option) (*Transformer, error) {
 	transformerMap, err := transformerMapFromRules(cfg.TransformerRules)
 	if err != nil {
 		return nil, err
@@ -46,6 +50,12 @@ func New(cfg *Config, processor processor.Processor, opts ...Option) (*Transform
 		opt(t)
 	}
 
+	if t.validator != nil {
+		if err := t.validator(ctx, t.transformerMap); err != nil {
+			return nil, err
+		}
+	}
+
 	return t, nil
 }
 
@@ -57,6 +67,12 @@ func WithLogger(l loglib.Logger) Option {
 	}
 }
 
+func WithValidator(validator ValidatorFn) Option {
+	return func(in *Transformer) {
+		in.validator = validator
+	}
+}
+
 func (t *Transformer) ProcessWALEvent(ctx context.Context, event *wal.Event) error {
 	err := t.applyTransformations(event)
 	if err != nil {
@@ -125,12 +141,12 @@ func (t *Transformer) getTransformValue(column *wal.Column, columns []wal.Column
 }
 
 func schemaTableKey(schema, table string) string {
-	return schema + "/" + table
+	return pglib.QuoteQualifiedIdentifier(schema, table)
 }
 
-func transformerMapFromRules(rules []TableRules) (map[string]columnTransformers, error) {
+func transformerMapFromRules(rules []TableRules) (map[string]ColumnTransformers, error) {
 	var err error
-	transformerMap := map[string]columnTransformers{}
+	transformerMap := map[string]ColumnTransformers{}
 	for _, table := range rules {
 		schemaTableTransformers := make(map[string]transformers.Transformer)
 		transformerMap[schemaTableKey(table.Schema, table.Table)] = schemaTableTransformers
diff --git a/pkg/wal/processor/transformer/wal_transformer_validator.go b/pkg/wal/processor/transformer/wal_transformer_validator.go
new file mode 100644
index 0000000..0d5a508
--- /dev/null
+++ b/pkg/wal/processor/transformer/wal_transformer_validator.go
@@ -0,0 +1,101 @@
+// SPDX-License-Identifier: Apache-2.0
+
+package transformer
+
+import (
+	"context"
+	"fmt"
+
+	"github.com/jackc/pgx/v5/pgtype"
+	pglib "github.com/xataio/pgstream/internal/postgres"
+	"github.com/xataio/pgstream/pkg/transformers"
+	"golang.org/x/exp/slices"
+)
+
+type PostgresTransformerValidator struct {
+	connBuilder connBuilder
+}
+
+type connBuilder func(context.Context) (pglib.Querier, error)
+
+func NewPostgresTransformerValidator(pgURL string) *PostgresTransformerValidator {
+	return &PostgresTransformerValidator{
+		connBuilder: func(ctx context.Context) (pglib.Querier, error) {
+			return pglib.NewConn(ctx, pgURL)
+		},
+	}
+}
+
+func (v *PostgresTransformerValidator) Validate(ctx context.Context, transformerMap map[string]ColumnTransformers) error {
+	conn, err := v.connBuilder(ctx)
+	if err != nil {
+		return fmt.Errorf("creating postgres connection: %w", err)
+	}
+	defer conn.Close(context.Background())
+
+	for schemaTable, columnTransformers := range transformerMap {
+		query := fmt.Sprintf("SELECT * FROM %s LIMIT 0", schemaTable)
+		rows, err := conn.Query(ctx, query)
+		if err != nil {
+			return fmt.Errorf("querying table rows: %w", err)
+		}
+		defer rows.Close()
+		fieldDescriptions := rows.FieldDescriptions()
+
+		// TODO: maybe error out if len(fieldDescriptions) != len(columnTransformers)
+		// if we start requiring a transformer for every column (noop transformers)
+
+		// map column names to column pg type OIDs, skip columns that don't have a transformer
+		mappedColumns := make(map[string]uint32, len(fieldDescriptions))
+		for _, desc := range fieldDescriptions {
+			if _, found := columnTransformers[string(desc.Name)]; !found {
+				continue
+			}
+
+			mappedColumns[string(desc.Name)] = desc.DataTypeOID
+		}
+
+		// check that all column transformers are compatible with corresponding column types
+		for colName, tr := range columnTransformers {
+			datatype, found := mappedColumns[colName]
+			if !found {
+				// validate that all column in the rules are present in the table
+				return fmt.Errorf("column %s not found in table %s", colName, schemaTable)
+			}
+			if !pgTypeCompatibleWithTransformerType(tr.CompatibleTypes(), datatype) {
+				return fmt.Errorf("transformer specified for column %s does not support pg data type", colName)
+			}
+		}
+	}
+
+	return nil
+}
+
+func pgTypeCompatibleWithTransformerType(compatibleTypes []transformers.SupportedDataType, pgType uint32) bool {
+	switch pgType {
+	case pgtype.TextOID, pgtype.VarcharOID, pgtype.BPCharOID:
+		return slices.Contains(compatibleTypes, transformers.StringDataType)
+	case pgtype.Float4OID:
+		return slices.Contains(compatibleTypes, transformers.Float32DataType)
+	case pgtype.Float8OID:
+		return slices.Contains(compatibleTypes, transformers.Float64DataType)
+	case pgtype.Int2OID:
+		return slices.Contains(compatibleTypes, transformers.Integer16DataType)
+	case pgtype.Int4OID:
+		return slices.Contains(compatibleTypes, transformers.Integer32DataType)
+	case pgtype.Int8OID:
+		return slices.Contains(compatibleTypes, transformers.Integer64DataType)
+	case pgtype.BoolOID:
+		return slices.Contains(compatibleTypes, transformers.BooleanDataType)
+	case pgtype.UUIDOID:
+		return slices.Contains(compatibleTypes, transformers.UInt8ArrayOf16DataType)
+	case pgtype.ByteaOID:
+		return slices.Contains(compatibleTypes, transformers.ByteArrayDataType)
+	case pgtype.DateOID:
+		return slices.Contains(compatibleTypes, transformers.DateDataType)
+	case pgtype.TimestampOID, pgtype.TimestamptzOID:
+		return slices.Contains(compatibleTypes, transformers.DatetimeDataType)
+	default:
+		return false
+	}
+}


Test patch:
diff --git a/pkg/stream/integration/pg_pg_integration_transformer_test.go b/pkg/stream/integration/pg_pg_integration_transformer_test.go
index ecde0ce..52b6808 100644
--- a/pkg/stream/integration/pg_pg_integration_transformer_test.go
+++ b/pkg/stream/integration/pg_pg_integration_transformer_test.go
@@ -59,11 +59,12 @@ func Test_PostgresToPostgres_Transformer(t *testing.T) {
 
 	ctx, cancel := context.WithCancel(context.Background())
 	defer cancel()
-	runStream(t, ctx, cfg)
 
 	testTable := "pg2pg_integration_transformer_test"
 	execQuery(t, ctx, fmt.Sprintf(createTableQuery, testTable))
 
+	runStream(t, ctx, cfg)
+
 	targetConn, err := pglib.NewConn(ctx, targetPGURL)
 	require.NoError(t, err)
 	defer targetConn.Close(ctx)
diff --git a/pkg/wal/processor/transformer/wal_transformer_test.go b/pkg/wal/processor/transformer/wal_transformer_test.go
index a5d7bca..208e2ea 100644
--- a/pkg/wal/processor/transformer/wal_transformer_test.go
+++ b/pkg/wal/processor/transformer/wal_transformer_test.go
@@ -58,11 +58,11 @@ func TestTransformer_New(t *testing.T) {
 			wantTransformer: &Transformer{
 				logger:    log.NewNoopLogger(),
 				processor: mockProcessor,
-				transformerMap: map[string]columnTransformers{
-					"public/test1": {
+				transformerMap: map[string]ColumnTransformers{
+					"\"public\".\"test1\"": {
 						"column_1": testTransformer,
 					},
-					"test/test2": {
+					"\"test\".\"test2\"": {
 						"column_2": testTransformer,
 					},
 				},
@@ -75,7 +75,7 @@ func TestTransformer_New(t *testing.T) {
 		t.Run(tc.name, func(t *testing.T) {
 			t.Parallel()
 
-			transformer, err := New(tc.config, mockProcessor)
+			transformer, err := New(context.Background(), tc.config, mockProcessor)
 			require.ErrorIs(t, err, tc.wantErr)
 			require.Equal(t, tc.wantTransformer, transformer)
 		})
@@ -88,7 +88,7 @@ func TestTransformer_ProcessWALEvent(t *testing.T) {
 	testSchema := "test_schema"
 	testTable := "test_table"
 	errTest := errors.New("oh noes")
-	testKey := testSchema + "/" + testTable
+	testKey := "\"test_schema\".\"test_table\""
 
 	newTestEvent := func(cols []wal.Column) *wal.Event {
 		return &wal.Event{
@@ -106,7 +106,7 @@ func TestTransformer_ProcessWALEvent(t *testing.T) {
 		name           string
 		event          *wal.Event
 		processor      processor.Processor
-		transformerMap map[string]columnTransformers
+		transformerMap map[string]ColumnTransformers
 
 		wantErr error
 	}{
@@ -119,7 +119,7 @@ func TestTransformer_ProcessWALEvent(t *testing.T) {
 					return nil
 				},
 			},
-			transformerMap: map[string]columnTransformers{},
+			transformerMap: map[string]ColumnTransformers{},
 
 			wantErr: nil,
 		},
@@ -132,7 +132,7 @@ func TestTransformer_ProcessWALEvent(t *testing.T) {
 					return nil
 				},
 			},
-			transformerMap: map[string]columnTransformers{
+			transformerMap: map[string]ColumnTransformers{
 				"anotherschema/table": {},
 			},
 
@@ -154,7 +154,7 @@ func TestTransformer_ProcessWALEvent(t *testing.T) {
 					return nil
 				},
 			},
-			transformerMap: map[string]columnTransformers{
+			transformerMap: map[string]ColumnTransformers{
 				testKey: {
 					"column_1": &transformermocks.Transformer{
 						TransformFn: func(a transformers.Value) (any, error) {
@@ -185,7 +185,7 @@ func TestTransformer_ProcessWALEvent(t *testing.T) {
 					return nil
 				},
 			},
-			transformerMap: map[string]columnTransformers{
+			transformerMap: map[string]ColumnTransformers{
 				testKey: {
 					"column_1": &transformermocks.Transformer{
 						TransformFn: func(a transformers.Value) (any, error) {
@@ -213,7 +213,7 @@ func TestTransformer_ProcessWALEvent(t *testing.T) {
 					return nil
 				},
 			},
-			transformerMap: map[string]columnTransformers{
+			transformerMap: map[string]ColumnTransformers{
 				testKey: {
 					"column_1": &transformermocks.Transformer{
 						TransformFn: func(a transformers.Value) (any, error) {
@@ -250,13 +250,13 @@ func Test_transformerMapFromRules(t *testing.T) {
 	testTable := "test_table"
 	testTransformer, err := transformers.NewStringTransformer(nil)
 	require.NoError(t, err)
-	testKey := testSchema + "/" + testTable
+	testKey := "\"test_schema\".\"test_table\""
 
 	tests := []struct {
 		name  string
 		rules []TableRules
 
-		wantTransformerMap map[string]columnTransformers
+		wantTransformerMap map[string]ColumnTransformers
 		wantErr            error
 	}{
 		{
@@ -276,7 +276,7 @@ func Test_transformerMapFromRules(t *testing.T) {
 				},
 			},
 
-			wantTransformerMap: map[string]columnTransformers{
+			wantTransformerMap: map[string]ColumnTransformers{
 				testKey: {
 					"column_1": testTransformer,
 					"column_2": testTransformer,
@@ -288,7 +288,7 @@ func Test_transformerMapFromRules(t *testing.T) {
 			name:  "ok - no rules",
 			rules: []TableRules{},
 
-			wantTransformerMap: map[string]columnTransformers{},
+			wantTransformerMap: map[string]ColumnTransformers{},
 			wantErr:            nil,
 		},
 		{
diff --git a/pkg/wal/processor/transformer/wal_transformer_validator_test.go b/pkg/wal/processor/transformer/wal_transformer_validator_test.go
new file mode 100644
index 0000000..455c76c
--- /dev/null
+++ b/pkg/wal/processor/transformer/wal_transformer_validator_test.go
@@ -0,0 +1,229 @@
+// SPDX-License-Identifier: Apache-2.0
+
+package transformer
+
+import (
+	"context"
+	"errors"
+	"fmt"
+	"testing"
+
+	"github.com/jackc/pgx/v5/pgconn"
+	"github.com/jackc/pgx/v5/pgtype"
+	"github.com/stretchr/testify/require"
+	pglib "github.com/xataio/pgstream/internal/postgres"
+	pgmocks "github.com/xataio/pgstream/internal/postgres/mocks"
+	"github.com/xataio/pgstream/pkg/transformers"
+	"github.com/xataio/pgstream/pkg/transformers/mocks"
+)
+
+func TestPostgresTransformerValidator(t *testing.T) {
+	t.Parallel()
+	testSchemaTable := "\"public\".\"test\""
+	testQuerier := &pgmocks.Querier{
+		QueryFn: func(ctx context.Context, query string, args ...any) (pglib.Rows, error) {
+			require.Equal(t, "SELECT * FROM \"public\".\"test\" LIMIT 0", query)
+			return &pgmocks.Rows{
+				FieldDescriptionsFn: func() []pgconn.FieldDescription {
+					return []pgconn.FieldDescription{
+						{
+							Name:        "id",
+							DataTypeOID: pgtype.Int8OID,
+						},
+						{
+							Name:        "name",
+							DataTypeOID: pgtype.TextOID,
+						},
+						{
+							Name:        "age",
+							DataTypeOID: pgtype.Int2OID,
+						},
+						{
+							Name:        "birth_date",
+							DataTypeOID: pgtype.DateOID,
+						},
+						{
+							Name:        "postcode",
+							DataTypeOID: pgtype.Int4OID,
+						},
+						{
+							Name:        "customer_id",
+							DataTypeOID: pgtype.UUIDOID,
+						},
+						{
+							Name:        "total_purchases",
+							DataTypeOID: pgtype.Float8OID,
+						},
+						{
+							Name:        "total_discounts",
+							DataTypeOID: pgtype.Float4OID,
+						},
+						{
+							Name:        "is_active",
+							DataTypeOID: pgtype.BoolOID,
+						},
+						{
+							Name:        "created_at",
+							DataTypeOID: pgtype.TimestamptzOID,
+						},
+					}
+				},
+				CloseFn: func() {},
+			}, nil
+		},
+	}
+
+	testPGValidator := PostgresTransformerValidator{
+		connBuilder: func(context.Context) (pglib.Querier, error) {
+			return testQuerier, nil
+		},
+	}
+
+	tests := []struct {
+		name           string
+		wantErr        error
+		transformerMap map[string]ColumnTransformers
+	}{
+		{
+			name: "ok - no error, few columns",
+			transformerMap: map[string]ColumnTransformers{
+				testSchemaTable: {
+					"id": &mocks.Transformer{
+						CompatibleTypesFn: func() []transformers.SupportedDataType {
+							return []transformers.SupportedDataType{
+								transformers.Integer64DataType,
+							}
+						},
+					},
+					"name": &mocks.Transformer{
+						CompatibleTypesFn: func() []transformers.SupportedDataType {
+							return []transformers.SupportedDataType{
+								transformers.StringDataType,
+							}
+						},
+					},
+				},
+			},
+
+			wantErr: nil,
+		},
+		{
+			name: "ok - no error, all columns",
+			transformerMap: map[string]ColumnTransformers{
+				testSchemaTable: {
+					"id": &mocks.Transformer{
+						CompatibleTypesFn: func() []transformers.SupportedDataType {
+							return []transformers.SupportedDataType{
+								transformers.Integer64DataType,
+							}
+						},
+					},
+					"name": &mocks.Transformer{
+						CompatibleTypesFn: func() []transformers.SupportedDataType {
+							return []transformers.SupportedDataType{
+								transformers.StringDataType,
+							}
+						},
+					},
+					"age": &mocks.Transformer{
+						CompatibleTypesFn: func() []transformers.SupportedDataType {
+							return []transformers.SupportedDataType{
+								transformers.Integer16DataType,
+							}
+						},
+					},
+					"birth_date": &mocks.Transformer{
+						CompatibleTypesFn: func() []transformers.SupportedDataType {
+							return []transformers.SupportedDataType{
+								transformers.DateDataType,
+							}
+						},
+					},
+					"postcode": &mocks.Transformer{
+						CompatibleTypesFn: func() []transformers.SupportedDataType {
+							return []transformers.SupportedDataType{
+								transformers.Integer32DataType,
+							}
+						},
+					},
+					"customer_id": &mocks.Transformer{
+						CompatibleTypesFn: func() []transformers.SupportedDataType {
+							return []transformers.SupportedDataType{
+								transformers.UInt8ArrayOf16DataType,
+							}
+						},
+					},
+					"total_purchases": &mocks.Transformer{
+						CompatibleTypesFn: func() []transformers.SupportedDataType {
+							return []transformers.SupportedDataType{
+								transformers.Float64DataType,
+							}
+						},
+					},
+					"total_discounts": &mocks.Transformer{
+						CompatibleTypesFn: func() []transformers.SupportedDataType {
+							return []transformers.SupportedDataType{
+								transformers.Float32DataType,
+							}
+						},
+					},
+					"is_active": &mocks.Transformer{
+						CompatibleTypesFn: func() []transformers.SupportedDataType {
+							return []transformers.SupportedDataType{
+								transformers.BooleanDataType,
+							}
+						},
+					},
+					"created_at": &mocks.Transformer{
+						CompatibleTypesFn: func() []transformers.SupportedDataType {
+							return []transformers.SupportedDataType{
+								transformers.DatetimeDataType,
+							}
+						},
+					},
+				},
+			},
+			wantErr: nil,
+		},
+		{
+			name: "error - invalid column type",
+			transformerMap: map[string]ColumnTransformers{
+				testSchemaTable: {
+					"id": &mocks.Transformer{
+						CompatibleTypesFn: func() []transformers.SupportedDataType {
+							return []transformers.SupportedDataType{
+								transformers.BooleanDataType,
+							}
+						},
+					},
+				},
+			},
+			wantErr: errors.New("transformer specified for column id does not support pg data type"),
+		},
+		{
+			name: "error - column not found in table",
+			transformerMap: map[string]ColumnTransformers{
+				testSchemaTable: {
+					"unknown_column": &mocks.Transformer{
+						CompatibleTypesFn: func() []transformers.SupportedDataType {
+							return []transformers.SupportedDataType{
+								transformers.StringDataType,
+							}
+						},
+					},
+				},
+			},
+			wantErr: fmt.Errorf("column %s not found in table %s", "unknown_column", testSchemaTable),
+		},
+	}
+	for _, tc := range tests {
+		t.Run(tc.name, func(t *testing.T) {
+			t.Parallel()
+
+			err := testPGValidator.Validate(context.Background(), tc.transformerMap)
+			if !errors.Is(err, tc.wantErr) {
+				require.Error(t, err, tc.wantErr.Error())
+			}
+		})
+	}
+}