diff options
Diffstat (limited to 'src/backend/executor')
-rw-r--r-- | src/backend/executor/execMain.c | 8 | ||||
-rw-r--r-- | src/backend/executor/execQual.c | 7 | ||||
-rw-r--r-- | src/backend/executor/execUtils.c | 8 |
3 files changed, 17 insertions, 6 deletions
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index e39911f16b2..632644f1d8f 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -1451,6 +1451,8 @@ ExecutePlan(EState *estate, /* * ExecRelCheck --- check that tuple meets constraints for result relation + * + * Returns NULL if OK, else name of failed check constraint */ static const char * ExecRelCheck(ResultRelInfo *resultRelInfo, @@ -1534,7 +1536,8 @@ ExecConstraints(ResultRelInfo *resultRelInfo, errmsg("null value in column \"%s\" violates not-null constraint", NameStr(rel->rd_att->attrs[attrChk - 1]->attname)), errdetail("Failing row contains %s.", - ExecBuildSlotValueDescription(slot, 64)))); + ExecBuildSlotValueDescription(slot, 64)), + errtablecol(rel, attrChk))); } } @@ -1548,7 +1551,8 @@ ExecConstraints(ResultRelInfo *resultRelInfo, errmsg("new row for relation \"%s\" violates check constraint \"%s\"", RelationGetRelationName(rel), failed), errdetail("Failing row contains %s.", - ExecBuildSlotValueDescription(slot, 64)))); + ExecBuildSlotValueDescription(slot, 64)), + errtableconstraint(rel, failed))); } } diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c index d9981a56f9c..62d27a75747 100644 --- a/src/backend/executor/execQual.c +++ b/src/backend/executor/execQual.c @@ -3881,7 +3881,8 @@ ExecEvalCoerceToDomain(CoerceToDomainState *cstate, ExprContext *econtext, ereport(ERROR, (errcode(ERRCODE_NOT_NULL_VIOLATION), errmsg("domain %s does not allow null values", - format_type_be(ctest->resulttype)))); + format_type_be(ctest->resulttype)), + errdatatype(ctest->resulttype))); break; case DOM_CONSTRAINT_CHECK: { @@ -3911,7 +3912,9 @@ ExecEvalCoerceToDomain(CoerceToDomainState *cstate, ExprContext *econtext, (errcode(ERRCODE_CHECK_VIOLATION), errmsg("value for domain %s violates check constraint \"%s\"", format_type_be(ctest->resulttype), - con->name))); + con->name), + errdomainconstraint(ctest->resulttype, + con->name))); econtext->domainValue_datum = save_datum; econtext->domainValue_isNull = save_isNull; diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c index 9206195277a..11be62e9153 100644 --- a/src/backend/executor/execUtils.c +++ b/src/backend/executor/execUtils.c @@ -1307,14 +1307,18 @@ retry: errmsg("could not create exclusion constraint \"%s\"", RelationGetRelationName(index)), errdetail("Key %s conflicts with key %s.", - error_new, error_existing))); + error_new, error_existing), + errtableconstraint(heap, + RelationGetRelationName(index)))); else ereport(ERROR, (errcode(ERRCODE_EXCLUSION_VIOLATION), errmsg("conflicting key value violates exclusion constraint \"%s\"", RelationGetRelationName(index)), errdetail("Key %s conflicts with existing key %s.", - error_new, error_existing))); + error_new, error_existing), + errtableconstraint(heap, + RelationGetRelationName(index)))); } index_endscan(index_scan); |