With this patch, all instances of tableoid, cmin, cmax etc. will get a non-NULL value irrespective of whether they appear on nullable side of the join or not.
I added two helper functions: GetFdwScanTupleExtraData and FillFdwScanTupleSysAttrs. The FDW author could use the former to get info about system attributes other than ctids and oids in fdw_scan_tlist during BeginForeignScan, and the latter to set values for these system attributes during IterateForeignScan (InvalidTransactionId for xmins/xmaxs, InvalidCommandId for cmins/cmaxs, and valid values for tableoids). Attached is a proposed patch for that. I also slightly simplified the changes to make_tuple_from_result_row and conversion_error_callback made by the postgres_fdw join pushdown patch. What do you think about that?
I revised comments a little bit. Attached is an updated version of the patch. I think this issue should be fixed in advance of the PostgreSQL 9.6beta1 release.
Best regards, Etsuro Fujita
--
Best Wishes, Ashutosh Bapat EnterpriseDB Corporation The Postgres Database Company