OK but what is the recommended way to get TupleDesc for p_type? I am aware of RelationNameGetTupleDesc but I shouldn't use it since it is deprecated. However by using it the code would look something like this (I tested it and it works as expected):
Datum demo(PG_FUNCTION_ARGS) { float8 xi = 1; float8 yi = 2; float8 xe = 3; float8 ye = 4; int32 id = 1; bool isnull; TupleDesc tupdesc; TupleDesc tupdesc_p; Datum values[3]; Datum vi[2]; Datum ve[2]; HeapTuple tuple; HeapTuple i; HeapTuple e; tupdesc_p = *RelationNameGetTupleDesc*("p_type"); vi[0] = Float8GetDatum(xi); vi[1] = Float8GetDatum(yi); i = heap_form_tuple(tupdesc_p, vi, &isnull); ve[0] = Float8GetDatum(xe); ve[1] = Float8GetDatum(ye); e = heap_form_tuple(tupdesc_p, ve, &isnull); if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("function returning record called in context that cannot accept type record"))); } BlessTupleDesc(tupdesc); * * values[0] = HeapTupleGetDatum(i); values[1] = HeapTupleGetDatum(e); values[2] = Int32GetDatum(id); tuple = heap_form_tuple(tupdesc, values, &isnull); PG_RETURN_DATUM(HeapTupleGetDatum(tuple)); } On Mon, Sep 27, 2010 at 3:32 AM, Tom Lane <t...@sss.pgh.pa.us> wrote: > You've omitted to tell us just > what's going wrong for you. > > regards, tom lane >