Обсуждение: referential integrity on existing table

Поиск
Список
Период
Сортировка

referential integrity on existing table

От
"Adam Fisher"
Дата:
Hi Everyone

My question is, is it possible to create a referential integrity constraint
on an exisiting, already populated, table??
My reasons for this are:

I am trying to copy two delimited text files into a database using the COPY
command. The first file - with about 280,000 lines - takes about 5-10
minutes to copy. The second file - with about 89,000 lines - is still
running after 4 days!
This second table has refrential integrity constraints on 3 fields (it's a
15 field table)

I have also copied this file into a table with no refential integrity
constraints and then used an INSERT command to copy the records into the
correct table. This is also taking days.

So, if I can't copy this file into a table and then apply the referential
integrity constraints, can anybody help me work out what my options are?

Thanks

Adam Fisher






Re: referential integrity on existing table

От
Patrick Welche
Дата:
On Fri, Dec 07, 2001 at 11:00:22AM +1100, Adam Fisher wrote:
> My question is, is it possible to create a referential integrity constraint
> on an exisiting, already populated, table??

Yes, cf:

ALTER TABLE table
    ADD table constraint definition

eg:

alter table "tblAddress"
  add constraint addfk
  foreign key("PersonID") references "tblPerson"("ID") match full;

Cheers,

Patrick

Re: referential integrity on existing table

От
"Paul Laub"
Дата:
> Hi Everyone
>
> My question is, is it possible to create a referential integrity constraint
> on an exisiting, already populated, table??
> My reasons for this are:

How about

    ALTER TABLE tablename ADD CONSTRAINT constraint_name FOREIGN KEY
        (childfield) REFERENCES parenttable (parentfield);

One downside: If anything goes wrong (some record violates referential
integrity), the command will fail without stating what record caused
the failure. So you might try something like the following first

    SELECT * FROM childtable WHERE NOT EXISTS
        (SELECT * FROM parenttable WHERE
            childtable.keyfield = parenttable.keyfield);

to locate potentially offending records.

Paul

>
> Adam Fisher




Paul B. Laub      http://astatine.incyte.com/laub      (650) 845-5411 (voice)
Incyte Genomics, Inc.   3160 Porter Dr.  Palo Alto, CA 94304 plaub@incyte.com
                       *** Incite genomics! ***


Вложения