-- Avanca cada sequencia para depois do maior id ja gravado.
--
-- POR QUE ISTO EXISTE COMO ARQUIVO. `migrar-dados.sh` ja fazia isto no fim da
-- carga, com o comentario certo: "sem isto, a primeira insercao depois da
-- migracao tenta o id 1 e colide -- e o erro nao aparece na carga, aparece na
-- primeira venda do dia seguinte".
--
-- O MESMO VALE PARA AS FIXTURES, e isso so apareceu em 07/09/2026, quando a
-- quarta fatia passou a CADASTRAR cliente pela API. O `fixtures.sql` insere com
-- id explicito -- 90001000 e, desde aquele dia, tambem 1 e 2 --, e insercao com
-- id explicito NAO move a sequencia no PostgreSQL. A primeira gravacao feita
-- pela aplicacao pedia o id 1, achava o cliente avulso no lugar, e respondia
-- 500 com a pagina generica do Laminas.
--
-- O MySQL nao tem esse problema: o AUTO_INCREMENT sobe sozinho quando alguem
-- grava um id maior. E por isso que a diferenca so aparece de um lado.
DO $$
DECLARE
    r record;
    ultimo bigint;
BEGIN
    FOR r IN
        SELECT c.relname AS tabela, a.attname AS coluna,
               pg_get_serial_sequence(quote_ident(c.relname), a.attname) AS seq
          FROM pg_class c
          JOIN pg_namespace n ON n.oid = c.relnamespace
          JOIN pg_attribute a ON a.attrelid = c.oid
         WHERE n.nspname = current_schema()
           AND c.relkind = 'r'
           AND a.attidentity <> ''
    LOOP
        IF r.seq IS NOT NULL THEN
            EXECUTE format('SELECT coalesce(max(%I), 0) FROM %I', r.coluna, r.tabela) INTO ultimo;
            PERFORM setval(r.seq, GREATEST(ultimo, 1));
        END IF;
    END LOOP;
END
$$;
