diff --git a/src/backend/commands/foreigncmds.c b/src/backend/commands/foreigncmds.c index 21d52e06ba..643ba91bfe 100644 --- a/src/backend/commands/foreigncmds.c +++ b/src/backend/commands/foreigncmds.c @@ -165,8 +165,18 @@ transformGenericOptions(Oid catalogId, result = optionListToArray(resultOptions); - if (OidIsValid(fdwvalidator) && DatumGetPointer(result) != NULL) - OidFunctionCall2(fdwvalidator, result, ObjectIdGetDatum(catalogId)); + if (OidIsValid(fdwvalidator)) + { + Datum valarg = result; + + /* + * Pass a null options list as an empty array, so that validators + * don't have to be declared non-strict to handle the case. + */ + if (DatumGetPointer(valarg) == NULL) + valarg = PointerGetDatum(construct_empty_array(TEXTOID)); + OidFunctionCall2(fdwvalidator, valarg, ObjectIdGetDatum(catalogId)); + } return result; }