On Tue, Sep 23, 2003 at 10:52:27AM -0600, scott.marlowe wrote:
> On Mon, 22 Sep 2003, Jodi Kanter wrote:
> 
> > I have inherited a database that was originally created in postgres 
> > version 6.? There were no steps taken at that time to implement 
> > constraints to ensure referential integrity. There are no FK 
> > constraints, PK constraints, etc..
> > Most of what currently exists is done in the existing code. I would like 
> > to change this and am interested in getting suggestions. I expect that 
> > PK constraints on each table as well as all FK constraints should be in 
> > place. Anything else that I should consider?
> > I have indexes currently set up on a variety of fields, including PK 
> > fields. Do the constraints automatically generate indexes on these 
> > fields such that I should remove the ones created at the end of my script?
> > Thanks in advance for the suggestions!
> 
> I would first upgrade to a reasonably new version of Postgesql 6.5.x is 
> pretty old.  7.3.4 or so should be a good choice.  You'll find that you 
> can add the pk/fk constraints in the conversion process, and still have a 
> faster database with fk/pk under 7.3 than you'd have with no fk/pk 
> constraints in 6.5.3
> 

Creating a primary key also creates a unique index on that field(s).  Depending on how 
normalised the data schema is, you may also have to create stored procedures to 
gaurentee data integrity.  If the data is not currently good, you may have to remove 
bad data to get the constraints to check.  I'm no guru, but I do something like this 
to at least check:

select count(distinct(id)) from table;
vs
select count(id) from table;

if the numbers are different, you have dup ids.

To get a list:
select id,count(*) from table group by (id);

I hope someone can figure out how how to put a where on that so it only returns those 
above 1, but I personaly don't know how, so I'll use my friend the shell:

psql database -Uuser -c 'select id,count(*) from table gropu by id' | grep -v '1$';

Alex Turner


---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

               http://www.postgresql.org/docs/faqs/FAQ.html

Reply via email to