GetAttributeByNum (или GetAttributeByName) работает только с датумами, а не с кортежами на диске, вместо этого используйте heap_getattr.
Вы объявили x как целое число, но пытаетесь прочитать его как int64 (PostgreSQL использует int4 для целочисленных типов, если вы явно не укажете свой столбец как int8).
И последнее, но не менее важное: используйте макросы DatumGet [YourType] при вызове функций, возвращающих данные, преобразование значения непосредственно в требуемый тип нарушает переносимость.
Длинно и коротко, код должен выглядеть примерно так:
if (TRIGGER_FIRED_BY_INSERT(trigdata->tg_event))
{
HeapTuple rettuple = trigdata->tg_trigtuple;
TupleDesc tupdesc = trigdata->tg_relation->rd_att;
bool isnull = false;
uint32 x=rettuple->t_len;
int32 att = DatumGetInt32(heap_getattr(rettuple, 1, tupdesc, &isnull));
elog(INFO,"len of tuple: %d",x);
if (!isnull)
elog(INFO,"first column being inserted x: %d",att);
else
elog(INFO,"first column being inserted x: NULL");
}
Возможно, вы также захотите взглянуть на интерфейс SPI, который упрощает доступ к базе данных из пользовательских функций C:
http://www.postgresql.org/docs/current/interactive/spi.html