Acabei enviando o e-mail errado e faltou informacões... *Vamos lá novamente:*
Possuo duas tabelas: *- users* - code (Coluna) *- companies* - client_code_increment (Coluna) A coluna users.code, recebe um código pelo cliente. Mas ele pode escolher em não por nenhum dado lá. Caso o cliente escolhe por não inserir nada na coluna, eu tenho que dar para ele um número... um value.... O default é 1000 Por que adicionar um valor DEFAULT a users.code não é uma solucão? > Porque o cliente pode escolher em por algum outro dado nesta coluna. Então um valor DEFAULT não é a saída Qual é o default code? > O default é 1000. O cliente pode por qualquer coisa no users.code, porém se lá estiver NULL, se o cliente não puser nada, nós irá setar a próxima value... 1001, 1002, 1003 etc > > O que é increment_client_code? > É uma coluna onde armazena o último client_code usado: ALTER TABLE public.companies ADD COLUMN client_code_increment integer; ALTER TABLE public.companies ALTER COLUMN client_code_increment SET DEFAULT 1000; *table users:* > CREATE TABLE > users > ( > id INTEGER DEFAULT nextval('users_id_seq'::regclass) NOT NULL, > email CHARACTER VARYING DEFAULT ''::CHARACTER VARYING NOT NULL, > encrypted_password CHARACTER VARYING DEFAULT ''::CHARACTER VARYING > NOT NULL, > reset_password_token CHARACTER VARYING, > reset_password_sent_at TIMESTAMP(6) WITHOUT TIME ZONE, > remember_created_at TIMESTAMP(6) WITHOUT TIME ZONE, > sign_in_count INTEGER DEFAULT 0 NOT NULL, > current_sign_in_at TIMESTAMP(6) WITHOUT TIME ZONE, > last_sign_in_at TIMESTAMP(6) WITHOUT TIME ZONE, > current_sign_in_ip INET, > last_sign_in_ip INET, > created_at TIMESTAMP(6) WITHOUT TIME ZONE NOT NULL, > updated_at TIMESTAMP(6) WITHOUT TIME ZONE NOT NULL, > name CHARACTER VARYING, > confirmation_token CHARACTER VARYING, > confirmed_at TIMESTAMP(6) WITHOUT TIME ZONE, > confirmation_sent_at TIMESTAMP(6) WITHOUT TIME ZONE, > company_name CHARACTER VARYING, > country CHARACTER VARYING, > mobile_number CHARACTER VARYING, > landline_number CHARACTER VARYING, > staff_colour CHARACTER VARYING, > company_id INTEGER, > role_id INTEGER, > active BOOLEAN DEFAULT false, > deleted BOOLEAN DEFAULT false, > avatar_file_name CHARACTER VARYING, > avatar_content_type CHARACTER VARYING, > avatar_file_size INTEGER, > avatar_updated_at TIMESTAMP(6) WITHOUT TIME ZONE, > fax CHARACTER VARYING, > website CHARACTER VARYING, > business_type CHARACTER VARYING, > lead_source CHARACTER VARYING, > code CHARACTER VARYING, > notes TEXT, > status CHARACTER VARYING, > tsv TSVECTOR, > origin CHARACTER VARYING, > origin_id CHARACTER VARYING, > first_name CHARACTER VARYING, > last_name CHARACTER VARYING, > billed_client_id INTEGER, > username CHARACTER VARYING, > is_client BOOLEAN DEFAULT false, > job_share BOOLEAN DEFAULT true > ); *Table companies:* > CREATE TABLE > companies > ( > id INTEGER DEFAULT nextval('companies_id_seq'::regclass) NOT NULL, > name CHARACTER VARYING, > country CHARACTER VARYING, > timezone CHARACTER VARYING, > mobile_number CHARACTER VARYING, > email CHARACTER VARYING, > website CHARACTER VARYING, > phone CHARACTER VARYING, > created_at TIMESTAMP(6) WITHOUT TIME ZONE NOT NULL, > updated_at TIMESTAMP(6) WITHOUT TIME ZONE NOT NULL, > reference_increment INTEGER DEFAULT 1000, > activated BOOLEAN DEFAULT true, > enable_quotes BOOLEAN DEFAULT false, > allow_billing_client BOOLEAN DEFAULT true, > allow_templates_recurrence BOOLEAN DEFAULT true, > recurrence_limit INTEGER DEFAULT 30, > job_title_dropdown BOOLEAN DEFAULT false, > default_reference_prefix CHARACTER VARYING, > default_reference_increment INTEGER, > default_visit_start_day INTEGER, > default_visit_start_hour INTEGER, > default_visit_start_min INTEGER, > job_date_entry_duration BOOLEAN DEFAULT true, > default_visit_duration_hour INTEGER DEFAULT 0, > default_visit_duration_min INTEGER DEFAULT 30, > date_entry_short BOOLEAN DEFAULT true, > time_entry_24 BOOLEAN DEFAULT true, > time_field_increment INTEGER DEFAULT 10, > enable_job_share BOOLEAN DEFAULT true, > token CHARACTER VARYING > ); Como posso fazer isto acontecer? Como posso criar a funcao e o trigger para tal? Aqui está o que fiz até agora: (Mas não consigo seguir) DROP FUNCTION IF EXISTS client_code_increment_count(); > CREATE OR REPLACE FUNCTION "public"."client_code_increment_count" () > RETURNS TABLE("code" INT) AS > $BODY$ > SELECT MAX(CAST(users.code AS INT)) FROM users WHERE users.code ~ '^\d+$' > AND company_id = 2 > $BODY$ > LANGUAGE sql; > SELECT * FROM "client_code_increment_count"(); > CREATE OR REPLACE FUNCTION "public"."auto_generate_client_code_if_empty" > () RETURNS "trigger" > VOLATILE > AS $dbvis$ > BEGIN > END; > $dbvis$ LANGUAGE plpgsql; > > CREATE TRIGGER "increment_client_code" > BEFORE INSERT OR UPDATE ON users > FOR EACH ROW > EXECUTE PROCEDURE "auto_generate_client_code_if_empty"(); Obrigado. Lucas
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral