Thread: Can't delete Null value from a not null field
I have a very simple table defined as CREATE TABLE custlist ( listid int4 NOT NULL, custid int4 NOT NULL); Somehow a record has gotten into the table with both values null. When I try to delete using delete from custlist where custid is null; or delete from custlist where listid is null; I get the output: ERROR: ExecutePlan: (junk) `ctid' is NULL! I get the same error if I try to update the null row. At this point I figured I would outsmart it and use the oid. However it appears the oid is null as well. Any suggestions? At this point the only thing I can see to do is dump the table and run the dump through a filter for the bad record and then reload it. This is all being done on 6.5.3. BTW the database is dumped and loaded onto a backup machine nightly. The load of this table is failing because of the null row.
"Bryan White" <bryan@arcamax.com> writes: > I get the output: > ERROR: ExecutePlan: (junk) `ctid' is NULL! > I get the same error if I try to update the null row. > At this point I figured I would outsmart it and use the oid. However it > appears the oid is null as well. Wow, that's bizarre. It shouldn't be *possible* for oid or ctid to be null --- AFAIK they don't have a null-value bit. There must be something really hosed up about that tuple's header. > Any suggestions? At this point the only thing I can see to do is dump the > table and run the dump through a filter for the bad record and then reload > it. Slightly faster than a dump and reload: RENAME broken table to something else; CREATE TABLE new-table; INSERT INTO new-table SELECT * FROM broken-table WHERE custid IS NOT NULL; then recreate the indexes wanted on new-table... regards, tom lane