-- Die Anwendungsrolle muss die Personalnummern-Sequenz fortschreiben dürfen. -- -- Hintergrund: employees.personnel_number ist GENERATED ALWAYS AS IDENTITY. -- Der Massenimport übernimmt die Nummern aus der Quelldatei — sie stehen auf -- Lohnzetteln, in Akten und auf Ausweisen, ein Import darf sie nicht neu -- vergeben — und schreibt danach den Zähler auf das neue Maximum. -- -- Ohne diesen Schritt vergäbe die Datenbank bei der nächsten Neueinstellung -- eine Nummer, die der Import bereits verbraucht hat. Der eindeutige Index -- weist sie ab, und zwar erst Wochen später beim ersten Eintritt nach der -- Übernahme — weit weg von der Ursache. -- -- `setval()` verlangt UPDATE auf der Sequenz. `usage, select` reicht nicht; -- genau daran ist der erste Durchstich gescheitert. do $$ declare v_sequenz text := pg_get_serial_sequence('public.employees', 'personnel_number'); r text; begin if v_sequenz is null then raise exception 'Sequenz zu employees.personnel_number nicht gefunden.'; end if; -- Nur an Rollen, die es gibt: dieselbe Datei soll auf einem gewöhnlichen -- PostgreSQL ohne die Supabase-Rollen laufen. foreach r in array array['alpenwerk_app', 'authenticated', 'service_role'] loop if exists (select 1 from pg_roles where rolname = r) then execute format('grant usage, select, update on sequence %s to %I', v_sequenz, r); end if; end loop; end; $$; -- Damit künftige Sequenzen in diesem Schema dieselben Rechte bekommen und -- der nächste Import nicht an derselben Stelle stehenbleibt. do $$ begin if exists (select 1 from pg_roles where rolname = 'alpenwerk_app') then execute 'alter default privileges in schema public grant usage, select, update on sequences to alpenwerk_app'; end if; end; $$;