Thread: attlen weirdness?
I am using the following info to migrate a table from 6.2.1 to 6.3 \connect template1 drop database magecal; create database magecal; \connect magecal \connect - julie CREATE TABLE dates (id int4, date char(10), news char(1024)) archive = none; COPY dates FROM stdin; 1 1998Jan16 <H3>Calendar Created</H3> ! \. CREATE INDEX dates_indx on dates using btree ( id int4_ops, date bpchar_ops ); now if I connect to the database and do select attlen from pg_attribute where attname='news'; I get -1 This doesn't seem quite right. Julie -- [ Julia Anne Case ] [ Ships are safe inside the harbor, ] [Programmer at large] [ but is that what ships are really for. ] [ Admining Linux ] [ To thine own self be true. ] [ Windows/WindowsNT ] [ Fair is where you take your cows to be judged. ]
Bruce? Guys? Any word on this one? I *thought* I remembered reading soething about the 'attlen' becoming -1, but just checked the mailing list archives and couldn't find anything :( Thanks... On Tue, 10 Mar 1998, Julia A.Case wrote: > I am using the following info to migrate a table from 6.2.1 to 6.3 > > \connect template1 > drop database magecal; > create database magecal; > \connect magecal > \connect - julie > CREATE TABLE dates (id int4, date char(10), news char(1024)) archive = none; > COPY dates FROM stdin; > 1 1998Jan16 <H3>Calendar Created</H3> ! > ! > ! > > \. > CREATE INDEX dates_indx on dates using btree ( id int4_ops, date bpchar_ops ); > > > now if I connect to the database and do > > select attlen from pg_attribute where attname='news'; > > I get > -1 > > This doesn't seem quite right. > > Julie > > -- > [ Julia Anne Case ] [ Ships are safe inside the harbor, ] > [Programmer at large] [ but is that what ships are really for. ] > [ Admining Linux ] [ To thine own self be true. ] > [ Windows/WindowsNT ] [ Fair is where you take your cows to be judged. ] >
Quoting The Hermit Hacker (scrappy@hub.org): > > Bruce? Guys? Any word on this one? I *thought* I remembered reading > soething about the 'attlen' becoming -1, but just checked the mailing list > archives and couldn't find anything :( > It appears as if atttypmod now has the field length + 4 ??? Julie -- [ Julia Anne Case ] [ Ships are safe inside the harbor, ] [Programmer at large] [ but is that what ships are really for. ] [ Admining Linux ] [ To thine own self be true. ] [ Windows/WindowsNT ] [ Fair is where you take your cows to be judged. ]
> > Quoting The Hermit Hacker (scrappy@hub.org): > > > > Bruce? Guys? Any word on this one? I *thought* I remembered reading > > soething about the 'attlen' becoming -1, but just checked the mailing list > > archives and couldn't find anything :( > > > > It appears as if atttypmod now has the field length + 4 ??? I am the atttypmod guy, but there is not enough context to answer this question. -- Bruce Momjian | 830 Blythe Avenue maillist@candle.pha.pa.us | Drexel Hill, Pennsylvania 19026 + If your life is a hard drive, | (610) 353-9879(w) + Christ can be your backup. | (610) 853-3000(h)
> > Quoting The Hermit Hacker (scrappy@hub.org): > > > > Bruce? Guys? Any word on this one? I *thought* I remembered reading > > soething about the 'attlen' becoming -1, but just checked the mailing list > > archives and couldn't find anything :( > > > > It appears as if atttypmod now has the field length + 4 ??? I assume you are asking of attlen for char() and varchar() have the max length. The answer is now NO. They are varlena structures like text, and so have a attlen of -1. Atttypmod for that pg_attribute row now has the defined length. In the old days, pre 6.3, pg_type.typlen != pg_attribute.attlen for char() and varchar(), causing all sorts of type-conditional wierness in the backend for these types. With the new code, pg_type.typlen = pg_attribute.attlen all the time. -- Bruce Momjian | 830 Blythe Avenue maillist@candle.pha.pa.us | Drexel Hill, Pennsylvania 19026 + If your life is a hard drive, | (610) 353-9879(w) + Christ can be your backup. | (610) 853-3000(h)
Quoting Bruce Momjian (maillist@candle.pha.pa.us): > I assume you are asking of attlen for char() and varchar() have the max > length. The answer is now NO. They are varlena structures like text, > and so have a attlen of -1. Atttypmod for that pg_attribute row now has > the defined length. > Even for a char(4) field? ok, if attlen doesn't give the length of a field, how do I find it? Julie -- [ Julia Anne Case ] [ Ships are safe inside the harbor, ] [Programmer at large] [ but is that what ships are really for. ] [ Admining Linux ] [ To thine own self be true. ] [ Windows/WindowsNT ] [ Fair is where you take your cows to be judged. ]
> > Quoting Bruce Momjian (maillist@candle.pha.pa.us): > > I assume you are asking of attlen for char() and varchar() have the max > > length. The answer is now NO. They are varlena structures like text, > > and so have a attlen of -1. Atttypmod for that pg_attribute row now has > > the defined length. > > > > Even for a char(4) field? ok, if attlen doesn't give the > length of a field, how do I find it? pg_attribute.atttypmod. -- Bruce Momjian | 830 Blythe Avenue maillist@candle.pha.pa.us | Drexel Hill, Pennsylvania 19026 + If your life is a hard drive, | (610) 353-9879(w) + Christ can be your backup. | (610) 853-3000(h)
Quoting Bruce Momjian (maillist@candle.pha.pa.us): > > pg_attribute.atttypmod. > this field appears to be field size + 4 in a char(1024) field it returns 1028 in a char(10) it returns 14 is it padded? Julie -- [ Julia Anne Case ] [ Ships are safe inside the harbor, ] [Programmer at large] [ but is that what ships are really for. ] [ Admining Linux ] [ To thine own self be true. ] [ Windows/WindowsNT ] [ Fair is where you take your cows to be judged. ]
> > Quoting Bruce Momjian (maillist@candle.pha.pa.us): > > > > pg_attribute.atttypmod. > > > this field appears to be field size + 4 > in a char(1024) field it returns 1028 > in a char(10) it returns 14 > > is it padded? > Yes. All varlena sizes store the VARHDRSZ, variable header size of 4, in the length field. -- Bruce Momjian | 830 Blythe Avenue maillist@candle.pha.pa.us | Drexel Hill, Pennsylvania 19026 + If your life is a hard drive, | (610) 353-9879(w) + Christ can be your backup. | (610) 853-3000(h)