On Sun, Jun 23, 2013 at 5:04 PM, Martín Marqués <mar...@2ndquadrant.com>wrote:

> Is it possible to see the function?


Yes -- It checks that the given vendor has the given vendor_type by calling
fn_get_vendor_types_by_vendor(), which gets its data from another table,
tb_vendor_vendor_type (a join table between tb_vendor and tb_vendor_type):

CREATE OR REPLACE FUNCTION public.fn_vendor_has_vendor_type(in_vendor
integer, in_vendor_type integer)
 RETURNS boolean
 LANGUAGE plpgsql
 STABLE STRICT
AS $function$
BEGIN
    IF in_vendor_type IN( SELECT fn_get_vendor_types_by_vendor( in_vendor )
)THEN
        RETURN TRUE;
    ELSE
        RETURN FALSE;
    END IF;
END
 $function$


I've installed this function on tb_project_vendor, which has a vendor_type
column:

ALTER TABLE tb_project_vendor
    ADD CONSTRAINT "ck_project_vendor_has_vendor_type"
        CHECK( fn_vendor_has_vendor_type( vendor, vendor_type ) );


So when the data for tb_project_vendor is restored before the data for
tb_vendor_vendor_type, I get errors on restore.


I know that this is stretching the limit of what a check constraint is
>
> meant to be, but is there a way, short of editing the pg_restore list
>> manually every time, to guarantee that the table used for validation is
>> populated before the table with the data being validated?
>>
>
> What for? If the dumps actually are taken without contraints, data
> restored (much faster as no constraints have to be checked, and just then
> constraints are added via ALTER TABLE.


So you suggest I use a trigger instead of a constraint?

Thanks

-- 
Moshe Jacobson
Nead Werx, Inc. | Manager of Systems Engineering
2323 Cumberland Parkway, Suite 201 | Atlanta, GA 30339
mo...@neadwerx.com | www.neadwerx.com

"Quality is not an act, it is a habit." -- Aristotle

Reply via email to