Add object names to partition integrity violations.
All errors of SQLSTATE class 23 should include the name of an object associated with the error in separate fields of the error report message. We do this so that applications need not try to extract them from the possibly-localized human-readable text of the message. Reported-by: Chris Bandy Author: Chris Bandy Reviewed-by: Amit Kapila and Amit Langote Discussion: https://postgr.es/m/0aa113a3-3c7f-db48-bcd8-f9290b2269ae@gmail.com
This commit is contained in:
parent
79dfa8afb2
commit
33753ac9d7
|
@ -5343,12 +5343,14 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap, LOCKMODE lockmode)
|
|||
ereport(ERROR,
|
||||
(errcode(ERRCODE_CHECK_VIOLATION),
|
||||
errmsg("updated partition constraint for default partition \"%s\" would be violated by some row",
|
||||
RelationGetRelationName(oldrel))));
|
||||
RelationGetRelationName(oldrel)),
|
||||
errtable(oldrel)));
|
||||
else
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_CHECK_VIOLATION),
|
||||
errmsg("partition constraint of relation \"%s\" is violated by some row",
|
||||
RelationGetRelationName(oldrel))));
|
||||
RelationGetRelationName(oldrel)),
|
||||
errtable(oldrel)));
|
||||
}
|
||||
|
||||
/* Write the tuple out to the new relation */
|
||||
|
|
|
@ -1878,7 +1878,8 @@ ExecPartitionCheckEmitError(ResultRelInfo *resultRelInfo,
|
|||
(errcode(ERRCODE_CHECK_VIOLATION),
|
||||
errmsg("new row for relation \"%s\" violates partition constraint",
|
||||
RelationGetRelationName(resultRelInfo->ri_RelationDesc)),
|
||||
val_desc ? errdetail("Failing row contains %s.", val_desc) : 0));
|
||||
val_desc ? errdetail("Failing row contains %s.", val_desc) : 0,
|
||||
errtable(resultRelInfo->ri_RelationDesc)));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -346,7 +346,8 @@ ExecFindPartition(ModifyTableState *mtstate,
|
|||
RelationGetRelationName(rel)),
|
||||
val_desc ?
|
||||
errdetail("Partition key of the failing row contains %s.",
|
||||
val_desc) : 0));
|
||||
val_desc) : 0,
|
||||
errtable(rel)));
|
||||
}
|
||||
|
||||
if (partdesc->is_leaf[partidx])
|
||||
|
|
|
@ -1366,7 +1366,8 @@ check_default_partition_contents(Relation parent, Relation default_rel,
|
|||
ereport(ERROR,
|
||||
(errcode(ERRCODE_CHECK_VIOLATION),
|
||||
errmsg("updated partition constraint for default partition \"%s\" would be violated by some row",
|
||||
RelationGetRelationName(default_rel))));
|
||||
RelationGetRelationName(default_rel)),
|
||||
errtable(default_rel)));
|
||||
|
||||
ResetExprContext(econtext);
|
||||
CHECK_FOR_INTERRUPTS();
|
||||
|
|
|
@ -2452,7 +2452,8 @@ ri_ReportViolation(const RI_ConstraintInfo *riinfo,
|
|||
NameStr(riinfo->conname)),
|
||||
errdetail("Key (%s)=(%s) is still referenced from table \"%s\".",
|
||||
key_names.data, key_values.data,
|
||||
RelationGetRelationName(fk_rel))));
|
||||
RelationGetRelationName(fk_rel)),
|
||||
errtableconstraint(fk_rel, NameStr(riinfo->conname))));
|
||||
else if (onfk)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FOREIGN_KEY_VIOLATION),
|
||||
|
|
Loading…
Reference in New Issue