>
>
> 1 - Criando a funcao
>
> CREATE OR REPLACE FUNCTION tf_users_update_code_column()
>   RETURNS trigger AS $$
>
>       BEGIN
>
>         IF NEW.company_id = 1 THEN
>         NEW.code = NEXTVAL('c1_users_code_seq');
>
>         ELSEIF NEW.company_id = 2 THEN
>         NEW.code = NEXTVAL('c2_users_code_seq');
>
>         ELSEIF NEW.company_id = 3 THEN
>         NEW.code = NEXTVAL('c3_users_code_seq');
>
>         ELSEIF NEW.company_id = 4 THEN
>         NEW.code = NEXTVAL('c4_users_code_seq');
>
>         ELSEIF NEW.company_id = 5 THEN
>         NEW.code = NEXTVAL('c5_users_code_seq');
>
>         ELSEIF NEW.company_id = 6 THEN
>         NEW.code = NEXTVAL('c6_users_code_seq');
>
>         ELSEIF NEW.company_id = 7 THEN
>         NEW.code = NEXTVAL('c7_users_code_seq');
>
>         ELSEIF NEW.company_id = 8 THEN
>         NEW.code = NEXTVAL('c8_users_code_seq');
>
>         ELSEIF NEW.company_id = 9 THEN
>         NEW.code = NEXTVAL('c9_users_code_seq');
>
>         ELSEIF NEW.company_id = 10 THEN
>         NEW.code = NEXTVAL('c10_users_code_seq');
>
>       END IF;
>
>       return NEW;
>
>       END
> $$  LANGUAGE plpgsql;
>
> 2 - Criando as seq
>
> CREATE SEQUENCE c1_users_code_seq
> INCREMENT 1
> MINVALUE 1
> MAXVALUE 9223372036854775807  START 1000;
> CACHE 1;
> CREATE SEQUENCE c2_users_code_seq
> INCREMENT 1
> MINVALUE 1
> MAXVALUE 9223372036854775807  START 1000;
> CACHE 1;
> CREATE SEQUENCE c3_users_code_seq
> INCREMENT 1
> MINVALUE 1
> MAXVALUE 9223372036854775807  START 1000;
> CACHE 1;
> CREATE SEQUENCE c4_users_code_seq
> INCREMENT 1
> MINVALUE 1
> MAXVALUE 9223372036854775807  START 1000;
> CACHE 1;
>
> ... [etc] ...
>
> 3 - Criando o TRIGGER
>
> CREATE TRIGGER t_users_update_code_column
>   BEFORE UPDATE OR INSERT
>   ON users
>   FOR EACH ROW
>   EXECUTE PROCEDURE tf_users_update_code_column();
>
>
>
>
> Isso funciona bem. Sem nenhum problema.
>
> O único problema é que eu teria milhares de seq para criar, pois haverá
> milhares de clientes.
> Isto é simplesmente inviável.
>
> - Por favor, baseado no que forneci a cima, poderiam dar alguma luz sobre
> como fazer o mesmo, mas mais "simples"? Talvez utilizar uma outra tabela
> para armazenar os dados, como já mencionado.
>
> Obrigado.
> Lucas
>
>

Ops... acabei de ver um erro meu:

- Antes de INSERT e não de UPDATE/INSERT


CREATE TRIGGER t_users_update_code_column
  BEFORE INSERT
  ON users
  FOR EACH ROW
  EXECUTE PROCEDURE tf_users_update_code_column();
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a