From: | "Greg Sabino Mullane" <greg(at)turnstep(dot)com> |
---|---|
To: | pgsql-admin(at)postgresql(dot)org |
Cc: | jscalia(at)cityblueprinting(dot)com |
Subject: | Re: getting a sequence to update properly |
Date: | 2005-06-18 13:56:26 |
Message-ID: | c7e8d92e65fcb10af06cc74e153e8d28@biglumber.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-admin |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
> I would normally just set minimum value to something greater than what
> already in the table,
That's the way to go.
> but the manually keyed values are all over the place, and I guess I'd
> really like to remove the gaps in the current values.
You'll have to do that yourself, perhaps with a plpgsql function or
an perl script. Here's a quick little function that should do the
job: give it a tablename and a column. The column must contain
unique, positive ids. After running, just slap a default nextval
on the column with a sequence starting at one above the number returned
and you're done.
CREATE OR REPLACE FUNCTION removeholes(text,text) RETURNS INT LANGUAGE plpgsql AS
$$
DECLARE
T ALIAS FOR $1;
C ALIAS FOR $2;
myst TEXT;
mycount INT := 0;
myrec RECORD;
BEGIN
myst := 'UPDATE '||T||' SET '||C||' = -'||C;
EXECUTE myst;
myst := 'SELECT '||C||' FROM '||T||' ORDER BY '||C||' DESC ';
FOR myrec IN EXECUTE myst LOOP
mycount := mycount + 1;
myst := 'UPDATE '||T||' SET '||C||' = '||mycount||' WHERE '||C||' = '||myrec.id;
EXECUTE myst;
END LOOP;
RETURN mycount;
END;
$$;
- --
Greg Sabino Mullane greg(at)turnstep(dot)com
PGP Key: 0x14964AC8 200506180923
http://biglumber.com/x/web?pk=2529DF6AB8F79407E94445B4BC9B906714964AC8
-----BEGIN PGP SIGNATURE-----
iD8DBQFCtCfbvJuQZxSWSsgRAuBJAJ4q9STr6u6fhssye0l8FitirLZwzQCgwR8g
G2+MqdQquDJz8O3G6zBsVS4=
=MfLV
-----END PGP SIGNATURE-----
From | Date | Subject | |
---|---|---|---|
Next Message | Greg Sabino Mullane | 2005-06-18 14:05:32 | Re: failed insert into serial-type row |
Previous Message | Michael Fuhr | 2005-06-18 13:52:55 | Re: failed insert into serial-type row |