Search Postgresql Archives

discard on constraint violation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Is there a way to tell a table to discard an insert if it violates a constraint (unique in my case) instead of giving an error? I don't want the overhead of a trigger on each row inserted.


My situation is that I'm reading data from an external website with lots of duplicate data. I am reading the data in a plpythonu function. I never update, only insert. A trigger on the table that has to check if each row exists before trying the insert is too much overhead.

I tried in plpython:


create or replace function testme() returns bool as
$$
try:
plpy.execute("insert into reports.survey_types(typeid,name)values(1,'test')")

    return true

except:

    plpy.notice('the constraint was violated')
    return false
$$language 'plpythonu';

where the insert violates a unique constraint and it never gets to the except. The function dies and doesn't get to my except with:

WARNING:  plpython: in function testme:
DETAIL: <class 'plpy.SPIError'>: Unknown error in PLy_spi_execute_query


ERROR:  duplicate key violates unique constraint "survey_types_pkey"
CONTEXT: SQL statement "insert into reports.survey_types(typeid,name)values(1,'test')"


--
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux