Thread: NULL becomes default
A surrogate key has been introduced on a table with modifiers: Column | Type | Modifiers -------------+-----------------------------+------------------------------------------------------------new_id | integer | not null default nextval(('some_id_seq'::text)::regclass) However, some legacy software inserts into the table by first getting column names and then composing an INSERT for all the columns, filling in any undefined values with NULLs. Thus when it attempts to insert a row I get a: ERROR: null value in column "new_id" violates not-null constraint Thus I would like NULLs in such INSERTs to be treated as DEFAULT rather than violating the constraint. Is there an easy way to do that at the database level? Thanks Julian
Hi Julian u need to reset your sequence, i had run through the same problem.
--
Thanks,
Sumeet.
On 8/17/06, Julian Scarfe <julian@avbrief.com > wrote:
>> taken from tom lane.A surrogate key has been introduced on a table with modifiers:
Column | Type |
Modifiers
-------------+-----------------------------+------------------------------------------------------------
new_id | integer | not null default
nextval(('some_id_seq'::text)::regclass)
However, some legacy software inserts into the table by first getting column
names and then composing an INSERT for all the columns, filling in any
undefined values with NULLs.
Thus when it attempts to insert a row I get a:
ERROR: null value in column "new_id" violates not-null constraint
To fix this, you need to do something like:
SELECT setval('public.fdata _fid_seq', max(fid)+1) FROM fdata; This will make sure that the next value your sequence generates is
greater than any key that already exists in the table.
--
Thanks,
Sumeet.
Hi, Julian, Julian Scarfe wrote: > A surrogate key has been introduced on a table with modifiers: > > Column | Type | Modifiers > -------------+-----------------------------+------------------------------------------------------------ > > new_id | integer | not null default > nextval(('some_id_seq'::text)::regclass) > > However, some legacy software inserts into the table by first getting > column names and then composing an INSERT for all the columns, filling > in any undefined values with NULLs. > > Thus when it attempts to insert a row I get a: > > ERROR: null value in column "new_id" violates not-null constraint > > Thus I would like NULLs in such INSERTs to be treated as DEFAULT rather > than violating the constraint. Is there an easy way to do that at the > database level? Did you try a "before insert" trigger that checks new_id for null values, and replaces it with nextval()? Markus -- Markus Schaber | Logical Tracking&Tracing International AG Dipl. Inf. | Software Development GIS Fight against software patents in EU! www.ffii.org www.nosoftwarepatents.org
>> Thus I would like NULLs in such INSERTs to be treated as DEFAULT rather >> than violating the constraint. Is there an easy way to do that at the >> database level? From: "Markus Schaber" <schabi@logix-tt.com> > Did you try a "before insert" trigger that checks new_id for null > values, and replaces it with nextval()? So thinking about this a little more, it requires me to be able to change a column value to DEFAULT (unless I implement the default from scratch in the trigger, but that feels messy). I don't have much experience of triggers: can I do that? Thanks Julian
On Sun, Aug 20, 2006 at 11:34:48AM +0100, Julian Scarfe wrote: > So thinking about this a little more, it requires me to be able to change a > column value to DEFAULT (unless I implement the default from scratch in the > trigger, but that feels messy). I don't have much experience of triggers: > can I do that? DEFAULT won't work for this case, I don't think; you want to set it to the nextval() of the sequence or whatever it was you were trying to do. But it's not messy: this is precisely the sort of thing BEFORE triggers are good at. A -- Andrew Sullivan | ajs@crankycanuck.ca "The year's penultimate month" is not in truth a good way of saying November. --H.W. Fowler