Re: error-tolerant COPY FROM - Mailing list pgsql-general

From Joolz
Subject Re: error-tolerant COPY FROM
Date
Msg-id 42883.10.0.4.254.1107523820.squirrel@webmail.arbodienst-limburg.nl
Whole thread Raw
In response to Re: error-tolerant COPY FROM  (Sean Davis <sdavis2@mail.nih.gov>)
Responses Re: error-tolerant COPY FROM
List pgsql-general
Sean Davis zei:
> I use a trigger on tables with foreign key references to either
> ignore
> the insert row or insert an appropriate matching row in the
> referenced
> table, if it does not exist.  In the function, I just raise a notice
> that I am doing this.  This is a simple example:
> create or replace function tgf_insert_gene_id() returns trigger as
> $$
> declare
>      gene_id_chk integer;
> begin
>      select into gene_id_chk gene_id from g_main where
> gene_id=NEW.gene_id;
>      if (NOT FOUND) THEN
>            BEGIN
>               INSERT into g_main (gene_id,name) values
> (NEW.gene_id,'INSERTED FOR FOREIGN KEY CHECK');
>                 RAISE NOTICE 'Inserting a gene ID to meet foreign
> key
> requirements';
>            END;
>      END IF;
>      return NEW;
> end;$$ language plpgsql;
>
> Just make a trigger for the tables of interest (I have several
> tables
> that reference gene_id in g_main) so they can all use the same
> trigger.
>
> This function simply looks up the proposed key to the foreign key
> table
> (gene_id) in the foreign key table.  If it is (NOT FOUND) then it
> inserts the key into the foreign table (g_main) the gene_id about to
> be
> inserted and then raises a notice (which goes into the log if you
> have
> logging set up to log notices).  Then, the function returns and,
> because we did the insert, foreign key checks work fine.  You could
> just as easily choose to NOT insert a record that doesn't meet
> foreign
> key checks, or even do an insert into a separate table instead that
> contains all of the rows that don't match a foreign key.
>
> Hope this helps....
> Sean

Thanks Sean, but in my situation I don't want the database to be so
versatile as to handle all the errors itself, this would create
unneccesary load during all operations on the tables, not only when
running the import.

But I'm getting lots of great feedback from the list, thanks everyone!


pgsql-general by date:

Previous
From: "Joolz"
Date:
Subject: Re: error-tolerant COPY FROM
Next
From: "Ben-Nes Yonatan"
Date:
Subject: Re: mysql load_file() function