[postgresql / plpgsql] exceptions

Pagina: 1
Acties:

  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 23:20
Ik heb een mooie postgresql database gemaakt waar ik een lading businessrules bij in wil gaan zetten in functies, zodat ik straks vanuit php deze functies aan kan roepen ipv complete sql statements te gaan schrijven.

Nu heeft postgresql constraints, die heb ik uiteraard ook gebruikt. Een voorbeeld hiervan is een tabel met "types":
code:
1
2
3
4
5
6
7
8
9
                                     Table "address_types"
   Column    |          Type           |                       Modifiers                       
-------------+-------------------------+-------------------------------------------------------
 id             | integer                 | not null default nextval('seq_address_type_id'::text)
 description | character varying(1000) | not null
Primary key: ate_pkey
Unique keys: ate_dcn_ukey
Triggers: RI_ConstraintTrigger_33646,
          RI_ConstraintTrigger_33648


Als er nu de unique key laat afgaan door een niet unieke waarde in te voeren krijg ik netjes de melding voor m'n neus dat dat niet mag, (met constraint naam etc.) maar daar wil ik uiteraard mijn eigen melding voor maken. In oracle kan je dat netjes met dup_val_on_index of een vergelijkbare exception handler mee afvangen, maar ik kan nergens vinden welke "default" exception handlers postgresql kent.
Het exception deel van de postgresql manual is ook nogal mager.

Is het uberhaupt mogelijk om te controleren of een constraint af gaat, of moet ik een select count(*) op de tabel uitvoeren voordat ik een insert doe? (en dat is uiteraard nou net niet de bedoeling)

Egoist: A person of low taste, more interested in themselves than in me


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

In je php code kan je sowieso testen of een query een fout opleverde en welke dat dan was, maar hoe het in de plpgsql code moet kunnen?

Wellicht dat je voor dit soort vragen beter op de postgesql-mailinglists terecht kan.
Maar wellicht dat je met deze manual page nog wat kan, daar doen ze het iig met een count(*)...