@@ -1371,7 +1371,8 @@ plperl_validator(PG_FUNCTION_ARGS)
13711371& argtypes ,& argnames ,& argmodes );
13721372for (i = 0 ;i < numargs ;i ++ )
13731373{
1374- if (get_typtype (argtypes [i ])== TYPTYPE_PSEUDO )
1374+ if (get_typtype (argtypes [i ])== TYPTYPE_PSEUDO &&
1375+ argtypes [i ]!= RECORDOID )
13751376ereport (ERROR ,
13761377(errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
13771378errmsg ("PL/Perl functions cannot accept type %s" ,
@@ -2105,7 +2106,8 @@ compile_plperl_function(Oid fn_oid, bool is_trigger)
21052106typeStruct = (Form_pg_type )GETSTRUCT (typeTup );
21062107
21072108/* Disallow pseudotype argument */
2108- if (typeStruct -> typtype == TYPTYPE_PSEUDO )
2109+ if (typeStruct -> typtype == TYPTYPE_PSEUDO &&
2110+ procStruct -> proargtypes .values [i ]!= RECORDOID )
21092111{
21102112free (prodesc -> proname );
21112113free (prodesc );
@@ -2115,7 +2117,8 @@ compile_plperl_function(Oid fn_oid, bool is_trigger)
21152117format_type_be (procStruct -> proargtypes .values [i ]))));
21162118}
21172119
2118- if (typeStruct -> typtype == TYPTYPE_COMPOSITE )
2120+ if (typeStruct -> typtype == TYPTYPE_COMPOSITE ||
2121+ procStruct -> proargtypes .values [i ]== RECORDOID )
21192122prodesc -> arg_is_rowtype [i ]= true;
21202123else
21212124{