0001-fix-var_is_nonnullable-returning-old-new.patch
application/octet-stream
Filename: 0001-fix-var_is_nonnullable-returning-old-new.patch
Type: application/octet-stream
Part: 1
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
Series: patch 0001
| File | + | − |
|---|---|---|
| src/backend/optimizer/util/clauses.c | 9 | 0 |
diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 9fb266d0..f290a439 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -4631,6 +4631,15 @@ var_is_nonnullable(PlannerInfo *root, Var *var, NotNullSource source) if (var->varlevelsup != 0) return false; + /* + * A Var with VAR_RETURNING_OLD or VAR_RETURNING_NEW refers to the OLD or + * NEW tuple in a RETURNING list. Such a Var can be NULL even if the + * underlying column is defined NOT NULL, because the OLD tuple doesn't + * exist for INSERT and the NEW tuple doesn't exist for DELETE. + */ + if (var->varreturningtype != VAR_RETURNING_DEFAULT) + return false; + /* could the Var be nulled by any outer joins or grouping sets? */ if (!bms_is_empty(var->varnullingrels)) return false;