Re: BUG #5748: Invalid oidvector data during binary recv
От | Yeb Havinga |
---|---|
Тема | Re: BUG #5748: Invalid oidvector data during binary recv |
Дата | |
Msg-id | 4CE111D6.5070801@gmail.com обсуждение исходный текст |
Ответ на | Re: BUG #5748: Invalid oidvector data during binary recv (Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>) |
Ответы |
Re: BUG #5748: Invalid oidvector data during binary recv
|
Список | pgsql-bugs |
On 2010-11-15 11:40, Heikki Linnakangas wrote: > On 15.11.2010 12:08, Yeb Havinga wrote: >> On 2010-11-11 17:02, Heikki Linnakangas wrote: >>> On 11.11.2010 17:48, Tom Lane wrote: >>>> "Yeb Havinga"<yebhavinga@gmail.com> writes: >>>>> postgres=# create table a as select ''::oidvector; >>>>> SELECT 1 >>>>> postgres=# copy a to '/tmp/test' with binary; >>>>> COPY 1 >>>>> postgres=# copy a from '/tmp/test' with binary; >>>>> ERROR: invalid oidvector data >>>> >>>> The problem seems to be that array_recv passes back a zero-dimensional >>>> array, *not* a 1-D array, when it observes that the input has no >>>> elements. A zero-D array is not part of the subset of possible arrays >>>> that we allow for oidvector. >>> >>> Yeah, I just reached that conclusion too.. >> The patch below changes array_recv, so that it returns an empty 1-D >> array when an empty 1-D array was written binary. No changes in >> oidvectorrecv or int2vectorrecv are needed. > > That seems like a bad idea. array_in() represents an empty array with > zero dimensions, we're not going to change the generic array_recv() > function used for all arrays to behave differently because of some > corner-case in oidvectorrecv. It's possible to trigger it with any element type, as long as the use manages to construct a 1-D array. E.g. with contrib/_int.sql loaded, array substraction is possible. Now: postgres=# select ARRAY[1]::int4[] - ARRAY[1]::int4[]; ?column? ---------- {} (1 row) postgres=# select array_ndims(ARRAY[1]::int4[] - ARRAY[1]::int4[]); array_ndims ------------- 1 (1 row) Binary send and recv of the value at hand would change it into a 0-D vector. > > If we want do anything about this, the right fix is to add a special > case in oidvectorrecv/int2vectorrecv to handle empty array. Judging from the fact that it also happens with int4 arrays, this seems like the wrong place. regards, Yeb Havinga
В списке pgsql-bugs по дате отправления: