Re: [HACKERS] Re: varchar() troubles (fwd)
От | Bruce Momjian |
---|---|
Тема | Re: [HACKERS] Re: varchar() troubles (fwd) |
Дата | |
Msg-id | 199801130542.AAA20669@candle.pha.pa.us обсуждение исходный текст |
Список | pgsql-hackers |
Forwarded message: > > The problem was that some things were copied using VARSIZE rather than > > subtracting out VARHDRSZ first (actually, I think it might have use > > sizeof(int) and other dangers too). I patched that near the end of the year > > and my 980101.d tree and 980106.d tree do not exhibit the symptom: > > > > postgres=> create table t (v varchar(80),i int); > > CREATE > > postgres=> insert into t values ('hi', 1); > > INSERT 643562 1 > > postgres=> select * from t; > > v |i > > --+- > > hi|1 > > (1 row) > > I have found that ExecEvalVar() uses a descriptor that has the attr > length set to the maximum, instead of -1. The ExecTypeFromTL() comment > says: > > /* ---------------------------------------------------------------- > * ExecTypeFromTL > * > * Currently there are about 4 different places where we create > * TupleDescriptors. They should all be merged, or perhaps > * be rewritten to call BuildDesc(). > * > > Clearly stating that the tuple descriptors in the system are created in > several places. Some places have the length set wrong. I am going to > have to take a look at all those places, and make sure they have > consistent behaviour. Vadim, can you look at this for me. If you set a break at ExecEvalVar before executing the SELECT, you will see its tupledescriptor->attrs[0].attlen is the max length, and not -1 as it should be. I can't figure out where that is getting set. Can you also check the other tupledescriptor initializations to see they have the -1 for varchar too. I am stumped. -- Bruce Momjian maillist@candle.pha.pa.us
В списке pgsql-hackers по дате отправления: