>
>
> 1) You attached users_code_seq() to a trigger on the users table.
>

yes


> 2) You have a where clause:  company_id = NEW.id
> 3) NEW refers to users
> 4) NEW.id is obstensibly a USER ID
>


No...

CREATE OR REPLACE FUNCTION users_code_seq()
>    RETURNS "trigger" AS $$
> DECLARE code character varying;
> BEGIN
>         IF (TG_OP = 'INSERT') THEN
>         UPDATE public.companies SET client_code_increment =
> (client_code_increment + 1) WHERE id = NEW.id;
>         END IF;
>         IF NEW.code IS NULL THEN
>         SELECT client_code_increment INTO NEW.code FROM public.companies
> as c WHERE c.id = NEW.id ORDER BY client_code_increment DESC;
>         END IF;
>         RETURN NEW;
> END;
> $$ LANGUAGE plpgsql;


I'm updating the companies table... The company table has a column called
ID.
If I change that to company_id, I get the error:  column "company_id" does
not exist, because that column is inside USERS and not COMPANIES.

So as far as I can see here, that command is right.

- If I'm wrong, please, explain to me.

5) So you are basically saying: WHERE company_id = user_id
> 6) If you were to get match it would be entirely by accident - say because
> you used the same integer for both id values
>

Just to be clear here:

1 -

> ALTER TABLE public.companies ADD COLUMN client_code_increment integer;
> ALTER TABLE public.companies ALTER COLUMN client_code_increment SET NOT
> NULL;
> ALTER TABLE public.companies ALTER COLUMN client_code_increment SET
> DEFAULT 1000;



2 -

> CREATE OR REPLACE FUNCTION users_code_seq()
>    RETURNS "trigger" AS $$
> DECLARE code character varying;
> BEGIN
>         IF (TG_OP = 'INSERT') THEN
>         UPDATE public.companies SET client_code_increment =
> (client_code_increment + 1) WHERE company_id = NEW.id;
>         END IF;
>         IF NEW.code IS NULL THEN
>         SELECT client_code_increment INTO NEW.code FROM public.companies
> as c WHERE c.id = NEW.id ORDER BY client_code_increment DESC;
>         END IF;
>         RETURN NEW;
> END;
> $$ LANGUAGE plpgsql;


3 -

> CREATE TRIGGER tf_users_code_seq
>    BEFORE INSERT
>    ON public.users
>    FOR EACH ROW
>    EXECUTE PROCEDURE users_code_seq();

Reply via email to