diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c index eb49817cee..1ce14097d8 100644 --- a/src/backend/executor/execExprInterp.c +++ b/src/backend/executor/execExprInterp.c @@ -3150,6 +3150,10 @@ ExecEvalFieldStoreDeForm(ExprState *state, ExprEvalStep *op, ExprContext *econte HeapTupleHeader tuphdr; HeapTupleData tmptup; + if (DatumGetPointer(tupDatum) == NULL) + { + return; + } tuphdr = DatumGetHeapTupleHeader(tupDatum); tmptup.t_len = HeapTupleHeaderGetDatumLength(tuphdr); ItemPointerSetInvalid(&(tmptup.t_self)); diff --git a/src/test/regress/expected/plpgsql.out b/src/test/regress/expected/plpgsql.out index 278d056505..745c9354a1 100644 --- a/src/test/regress/expected/plpgsql.out +++ b/src/test/regress/expected/plpgsql.out @@ -5726,3 +5726,8 @@ END; $$ LANGUAGE plpgsql; ERROR: "x" is not a scalar variable LINE 3: GET DIAGNOSTICS x = ROW_COUNT; ^ +CREATE TYPE two_ints as (if1 int, if2 int); +CREATE DOMAIN domain AS two_ints CHECK ((VALUE).if1 > 0); +CREATE TABLE domain_indirection_test (f1 int, f3 domain, domain_array domain[]); +INSERT INTO domain_indirection_test (f1,f3.if1) VALUES (0, 1); +UPDATE domain_indirection_test SET domain_array[0].if2 = 5; diff --git a/src/test/regress/sql/plpgsql.sql b/src/test/regress/sql/plpgsql.sql index 7e52d4745d..f93eb3ec05 100644 --- a/src/test/regress/sql/plpgsql.sql +++ b/src/test/regress/sql/plpgsql.sql @@ -4667,3 +4667,9 @@ BEGIN GET DIAGNOSTICS x = ROW_COUNT; RETURN; END; $$ LANGUAGE plpgsql; + +CREATE TYPE two_ints as (if1 int, if2 int); +CREATE DOMAIN domain AS two_ints CHECK ((VALUE).if1 > 0); +CREATE TABLE domain_indirection_test (f1 int, f3 domain, domain_array domain[]); +INSERT INTO domain_indirection_test (f1,f3.if1) VALUES (0, 1); +UPDATE domain_indirection_test SET domain_array[0].if2 = 5;