On 2/18/19 2:34 PM, Liz Frost wrote:
> Hello all,
>
> I'm working on a foreign data wrapper that uses INSERT, and I noticed
> some odd behaviour. If I insert just one row, the
> TupleDesc->attr[0]->attname.data has the column names in it. However,
> in a multi-row string, all those are empty strings:
>
> I added this debugging code to BeginForeignInsert
> in https://bitbucket.org/adunstan/blackhole_fdw on postgres 10.
>
> int i;
> FormData_pg_attribute *attr;
> TupleDesc tupleDesc;
>
> tupleDesc = slot->tts_tupleDescriptor;
>
> for (i = 0; i < tupleDesc -> natts; i++) {
> attr = tupleDesc->attrs[i];
> elog(WARNING, "found column '%s'", attr->attname.data);
> }
>
> Now with a single row insert, this works as you'd expect:
>
> liz=# INSERT INTO bhtable (key, value) VALUES ('hello', 'world');
> WARNING: found column 'key'
> WARNING: found column 'value'
> INSERT 0 1
>
> But with a multi-row, all the column names are empty:
> liz=# INSERT INTO bhtable (key, value) VALUES ('hello', 'world'),
> ('goodmorning', 'world');
> WARNING: found column ''
> WARNING: found column ''
> WARNING: found column ''
> WARNING: found column ''
> INSERT 0 2
>
> It doesn't seem unreasonable to me that this data wouldn't be
> duplicated, but there's no mention of how I would go about retriving
> these column names for my individual rows, and most foreign data
> wrappers I can find are write-only.
>
>
There are numerous writable FDWs, including postgres_fdw in contrib, and
a whole lot more listed at <https://wiki.postgresql.org/wiki/Fdw> That
should supply you with plenty of example code.
cheers
andrew
--
Andrew Dunstan https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services