## TL;DR
A check constraint violation means a row's values break a rule the table enforces, such as a negative amount: capture the violating rows during the load, decide whether the rule or the data is wrong, since refunds and adjustments can make negative amounts legitimate, and fix the transform or amend the constraint with the rule's owner. Never bulk-disable the constraint to get a load through.

```text
postgres check constraint violated error failed insert on orders amount negative
```

## Use this when
- The check or run fails with this symptom: the insert fails because an orders amount violates the check constraint.
- You are working on a Postgres insert failing a check constraint on orders amount and the failure repeats on the same data or configuration.
- You need the failing rows, rule, or stage isolated before changing thresholds or code.

## Not for this skill when
- A not-null or foreign key violation, which involves different columns and fixes instead.
- The error text names a different tool, stage, or root cause. Match the verbatim error first and use that skill.

## Steps
1. Reproduce the insert in a transaction and capture the violating rows with their full values. Verify: the violating rows are captured before rollback
2. Read the constraint definition from the database catalog to state the exact rule being enforced. Verify: the rule is stated precisely
3. Trace the negative amounts to their source: refunds, discounts exceeding totals, or a sign error in a currency conversion. Verify: the amounts' origin is identified
4. Fix the transform if the data is wrong, or, if negative amounts are a real case, amend the constraint with the owner to encode the real rule, such as allowing negatives only for refund types. Verify: data and rule agree by an explicit decision
5. Rerun the load and confirm zero violations and that legitimate refund rows, if any, are represented as designed. Verify: the load completes under the agreed rule

## Variant phrasings
### postgres check constraint violated orders amount negative
The verbatim check-constraint phrasing.
### check constraint violation insert failed how to find rows
The row-finding phrasing for transactional reproduction.
### postgres check constraint negative amount refund rule
The rule-review phrasing for legitimate negative amounts.

Compatibility: Postgres check constraints on tables such as orders with amount rules

## Why it happens
Check constraints encode business rules in the database, so a violation is either bad data reaching the table or a rule that no longer matches the business. The error names the constraint, not which of those two it is, and guessing wrong either corrupts data or blocks legitimate rows.

## Edge cases / pitfalls
- Name constraints after the rule they enforce. A readable name turns the error into documentation.
- Log violating rows to a side table in the loader so the pattern accumulates evidence.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_xUgmw93HpK3tTkqmTuJ4Sg
