Re: alter table schema, default sequences stay the same

From: Sim Zacks <sim(at)compulab(dot)co(dot)il>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: alter table schema, default sequences stay the same
Date: 2010-06-30 05:33:24
Message-ID: 4C2AD724.9080901@compulab.co.il
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general


> I haven't consumed enough caffeine today to recall the details, but
> I think you could have ended up with default expressions like the above
> if the database had been dumped and reloaded from 8.0 or earlier.
> nextval(regclass) was introduced in 8.1 precisely to solve this type
> of problem.
>
>
>> Is there an easy way to modify all the default values now?
>>
> Not especially :-(. You're going to need to run around and change them
> all to the right name. Be sure to lose the ::text bit while at it,
> so it works right the next time.
>
> regards, tom lane
>
This is the query I used to generate the alter stmt for all the defaults
that used public sequences in the new schema

select 'alter table ' || relname || ' alter column ' || attname || ' set
default ' ||
replace(replace(replace(b.adsrc,'public.',''),'::text',''),'::regclass','')
|| ';'
from pg_attribute a
join pg_attrdef b on a.attrelid=b.adrelid and attnum=adnum
join pg_class c on c.oid=a.attrelid
where adsrc like '%nextval((''public.%'
and relnamespace=558726861
order by adsrc

My first database was an 8.0 and at some point we upgraded to 8.2 so
that must have caused the ?corruption?

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Adrian von Bidder 2010-06-30 06:09:34 Re: Migrating from MySQL
Previous Message Dagan McGregor 2010-06-30 05:17:34 Re: R: Re: postgres user password: Log on failure