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":
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)
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