I've got people
Based on this link and with a little improvement, below is the final result
-- tabela onde ficará guardado as sequências de cada loja tabela e coluna
CREATE TABLE public.sequencia_tabelas (
id_empr integer NOT NULL,
id_filial character(14) NOT NULL,
tabela varchar(100) NOT NULL,
coluna varchar(100) NOT NULL,
proximo_indice integer NOT NULL
);
ALTER TABLE public.sequencia_tabelas OWNER TO postgres;
ALTER TABLE ONLY public.sequencia_tabelas
ADD CONSTRAINT sequencia_tabelas_pkey PRIMARY KEY (id_empr, id_filial, tabela, coluna);
COMMENT ON TABLE public.sequencia_tabelas
IS 'Tabela de sequências amigáveis por empresa, filial, tabela e coluna';
-- Exemplo de inserção
-- INSERT INTO sequencia_tabelas(id_empr, id_filial, tabela, coluna, proximo_indice)
-- VALUES ('1', '12345678910111', 'pedido', 'numero_pedido', '0');
-- function proximo id
CREATE OR REPLACE FUNCTION proximo_id(id_empr text, id_filial text, tabela text, coluna text) RETURNS integer AS $$
DECLARE
proximo_valor integer;
BEGIN
EXECUTE format('UPDATE sequencia_tabelas SET proximo_indice = proximo_indice + 1 WHERE id_empr = %L AND id_filial = %L AND tabela = %L AND coluna = %L RETURNING proximo_indice', id_empr, id_filial, tabela, coluna) INTO proximo_valor;
RETURN proximo_valor;
END;
$$ LANGUAGE plpgsql;
COMMENT ON FUNCTION proximo_id(text, text, text, text) IS 'Incrementa e retorna o valor da coluna inteira $2 na tabela $1';
-- Exemplo de inserção
-- INSERT INTO pedido(id_empr, id_filial, numero_pedido, emissao, observacoes)
-- VALUES ('1', '12345678910111', proximo_id('1','12345678910111','pedido','numero_pedido'), LOCALTIMESTAMP, 'teste id');