Re: serial columns & loads misfeature?

Поиск
Список
Период
Сортировка
От Gregory Seidman
Тема Re: serial columns & loads misfeature?
Дата
Msg-id 20020628221630.GA24082@cs.brown.edu
обсуждение исходный текст
Ответ на Re: serial columns & loads misfeature?  (Kevin Brannen <kevinb@nurseamerica.net>)
Ответы Re: serial columns & loads misfeature?  (Manfred Koizar <mkoi-pg@aon.at>)
Список pgsql-general
Kevin Brannen sez:
[...]
} I suppose I could change the question to:  Why can't we have it both
} ways?  You know, have that ability controlled by a param in the
} postgresql.conf file; it could even be defaulted to "off".  I really
} think this could be important, especially if the ultimate goal is world
} domination. ;-)  After all, bulk loads and transformations are a fact of
} life that must be dealt with (so "don't do that" is not an option unless
} I don't use Pg, else I'll never migrate away from mysql).

You can have it both ways, at what may or may not be an acceptable
performance penalty. A trigger/rule can be written to update the sequence
upon any insertion. For that matter, since SERIAL is just shorthand for
creating a sequence and setting the column default to a function call, one
can simply write it longhand and replace the function call with a function
you wrote. For example (this requires some hoop-jumping to make the
references come out right):

CREATE TABLE Foo (
    id int UNIQUE NOT NULL, -- no default yet
    -- ... whatever else
    primary key (id)
);

CREATE FUNCTION next_foo() RETURNS int
AS 'SELECT COALESCE(max(id), 0)+1 FROM Foo'
LANGUAGE SQL;

ALTER TABLE Foo ALTER COLUMN id SET DEFAULT next_foo();

...and every time you insert a row without specifying the id by hand, the
id field will default to one more than the largest value currently in the
table. If you were feeling really clever and didn't mind the performance
penalty, you could even write a function that would reuse gaps.

Basically, the default behavior is the one with the minimum performance
hit.

[...]
} Thanks!
} Kevin
--Greg




В списке pgsql-general по дате отправления:

Предыдущее
От: Gregory Seidman
Дата:
Сообщение: select min row in a group
Следующее
От: Manfred Koizar
Дата:
Сообщение: Re: select min row in a group