Thread: Unexpected SQL error for UPDATE

Unexpected SQL error for UPDATE

From
aurora
Date:
Originally I have a table like this<br /><br /><br />create table users ( <br /> userid integer not null, <br />
email_addressvarchar (255) unique not null,<br /> PRIMARY KEY (userid) <br /> ); <br /><br /><br />Later I find that
varchar(255)is not enough. I designed to change the type to<br />text. There is no simple SQL to alter the type. So I
usea series of SQLs to<br />create a new column, copy the data over and then replace the old column with the <br
/>new.<br/><br /> ALTER TABLE users ADD email_address_text text UNIQUE; <br />UPDATE users set
email_address_text=email_address;<br/>ALTER TABLE users DROP email_address;<br />ALTER TABLE users RENAME
email_address_textTO email_address;<br />ALTER TABLE users ALTER email_address SET not null;<br /><br /><br />This
worksmostly OK. Until I have one database that has over 1 million records<br />in table user. It fails with an
inexplicableerror:<br /><br /><br />mydb=# UPDATE users set email_address_text=email_address;<br />ERROR: invalid page
headerin block 6776 of relation "users_email_address_text_key" <br /><br /><br />Anyone can shred some light what has
wentwrong?<br /><br />wy<br /><br /><br /><br /> 

Re: Unexpected SQL error for UPDATE

From
Michael Glaesemann
Date:
On Jul 11, 2006, at 20:47 , aurora wrote:

> There is no simple SQL to alter the type. So I use a series of SQLs to
> create a new column, copy the data over and then replace the old  
> column with the
> new.

What version of PostgreSQL are you running? In 8.0 and later you can  
use ALTER TABLE ALTER TYPE.

http://www.postgresql.org/docs/current/interactive/sql-altertable.html

Something like this (untested) should work in your case:

ALTER TABLE users ALTER email_addresses TYPE text;

> ALTER TABLE users ADD email_address_text text UNIQUE;
> UPDATE users set email_address_text=email_address;
> ALTER TABLE users DROP email_address;
> ALTER TABLE users RENAME email_address_text TO email_address;
> ALTER TABLE users ALTER email_address SET not null;

This looks like it should work, so perhaps someone else has an idea  
as to why you're receiving the error. Is the error reproducible? If  
you can put together a reproducible test case, it may help someone  
else be able to figure out what's going on.

Michael Glaesemann
grzm seespotcode net





Re: Unexpected SQL error for UPDATE

From
"Jaime Casanova"
Date:
>
> mydb=# UPDATE users set email_address_text=email_address;
> ERROR: invalid page header in block 6776 of relation
> "users_email_address_text_key"
>

users_email_address_text_key sounds a lot like an index... is it an
index? if so, what happenned if you REINDEX the table or even DROP and
CREATE the index again? it certainly sounds to an index corruption.

-- 
regards,
Jaime Casanova

"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs and the universe trying
to produce bigger and better idiots.
So far, the universe is winning."                                      Richard Cook


Re: Unexpected SQL error for UPDATE

From
aurora
Date:
Yes that helped!

  reindex index users_email_address_text_key;
  UPDATE users set email_address_text=email_address;

It kind of works now. Or at least it does not result in error. The UPDATE query is running for more than an hour and still hasn't return. This is inline 
with what we have seen before that coping 1 million fields seems to be 
excessively slow.

About the index, it is created implicitly because of the UNIQUE constraint. At this point right after the column is added, they are all null.

wy

On 7/12/06, Jaime Casanova <systemguards@gmail.com> wrote:
users_email_address_text_key sounds a lot like an index... is it an
index? if so, what happenned if you REINDEX the table or even DROP and
CREATE the index again? it certainly sounds to an index corruption.

--
regards,
Jaime Casanova


Re: Unexpected SQL error for UPDATE

From
"Jaime Casanova"
Date:
On 7/12/06, aurora <aurora00@gmail.com> wrote:
> Yes that helped!
>
>   reindex index users_email_address_text_key;
>

what version of postgres is this? there have been some bug fixes that
involved indexes on text columns.

wich locale are you using?

-- 
regards,
Jaime Casanova

"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs and the universe trying
to produce bigger and better idiots.
So far, the universe is winning."                                      Richard Cook