A few very minor comments while quickly paging through: 1. non-ASCII tests are going to cause problems in one platform or another. Please don't include that one.
2. error messages a) please use ereport() not elog() b) conform to style guidelines: errmsg() start with lowercase, others are complete phrases (start with uppercase, end with period) c) replace "The type you was trying to transform can't be represented in JSONB" maybe with errmsg("could not transform to type \"%s\"", "jsonb"), errdetail("The type you are trying to transform can't be represented in JSON") d) same errmsg() for the other error; figure out suitable errdetail. 3. whitespace: don't add newlines to while, DirectFunctionCallN, pnstrdup. 4. the "relocatability" test seems pointless to me. 5. "#undef _" looks bogus. Don't do it. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services