![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
I am in the process of converting an existing database to PostGreSQL and wrote a generic script to update all of the sequences as they default at 1. I thought it would be useful to other people who are converting their databases. |
|
create or replace function UpdateSequences() returns varchar(50) as $$ |
|
declare seqrecord record; tblname varchar(50); fieldname varchar(50); maxrecord record; maxvalue integer; begin for seqrecord in select relname from pg_statio_user_sequences Loop tblname:=split_part(seqrecord.relname,'_',1); fieldname:=split_part(seqrecord.relname,'_',2); for maxrecord in execute 'select max(' || fieldname || ') as f1 from ' || tblname LOOP maxvalue:=maxrecord.f1; end loop; execute 'alter sequence ' || seqrecord.relname || ' restart with ' || coalesce(maxvalue,0)+1 ; |
#3
| |||
| |||
|
|
For those that are puzzled, 8.0 allows you to use "dollar quoting" so you can avoid \'\'\' in your plpgsql functions. -- Richard Huxton Archonet Ltd ---------------------------(end of broadcast)--------------------------- TIP 3: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to majordomo (AT) postgresql (DOT) org so that your message can get through to the mailing list cleanly |
#4
| |||
| |||
|
|
When one moves from version 7.x to 8.x, will my old pgplsql functions continue to work with the single quotes |
#5
| |||
| |||
|
|
One thing you might want to test is what happens when you manually create a sequence separate from a table, i.e. no such table-name exists. |
|
Also, you can have more than one table relying on a single sequence (and I have in one of my systems). Not sure there's anything useful you can do in such a case, or how you'd detect such a situation. |
![]() |
| Thread Tools | |
| Display Modes | |
| |