Gregory Stark <[EMAIL PROTECTED]> writes: > You keep suggesting things that I've previously considered and rejected -- > perhaps prematurely. Off the top of my head I recall the following four > options from our discussions. It looks like we're circling around option 4.
No, I think I'm arguing for option 3. > And I take it you're not worried about sites that might not detoast a datum or > detoast one in the wrong memory context where previously they were guaranteed > it wouldn't generate a copy? In particular I'm worried about btree code and > plpgsql row/record handling. Any such site is already broken, because with the proposed design, code is only exposed to short-header datums if it is also exposed to toasted datums. It's possible that we would find a few places that hadn't gotten converted, but any such place is a must-fix anyway. In practice the TOAST support has been in there long enough that I don't think we'll find any ... at least not in the core code. It's entirely possible that there is user-defined code out there that uses varlena format and isn't careful about detoasting. This is an argument for allowing opt-out (see below). > I'm not sure what to do about the alignment issue. We could just never align > 1-byte headers. That would work just fine as long a the data types that need > alignment don't get ported to the new macros. It seems silly to waste space on > disk in order to save a cpu memcpy that we aren't even going to be saving for > now anyways. No, a datum that is in 1-byte-header format wouldn't have any special alignment inside a tuple. There are two paths to get at it: detoast it (producing an aligned, 4-byte-header, palloc'd datum) or use the still-to-be-named macros that let you access the unaligned content directly. I'm inclined to think that we might want to set things up so that varlena datatypes can individually opt-in or opt-out of this treatment; a datatype that needs alignment of its content might well wish to opt-out to avoid copying overhead. We could do that either with a different typlen code, or still typlen -1 but pay attention to whether typalign is 'c'. > Option 1) > We detect cases where the typmod guarantees either a fixed size or a maximum > size < 256 bytes. After last week I would veto this option anyway: it fails unless we always know typmod exactly, and I'm here to tell you we don't. regards, tom lane ---------------------------(end of broadcast)--------------------------- TIP 3: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faq