LQPP/patch core123 function global lock 20100815-2.sql

Aus Piratenwiki Mirror
Zur Navigation springen Zur Suche springen
CREATE OR REPLACE FUNCTION "global_lock"() RETURNS VOID
 LANGUAGE 'plpgsql' VOLATILE AS $$
   BEGIN
     -- NOTE: PostgreSQL allows reading, while tables are locked in
     -- exclusive move. Transactions should be kept short anyway!
     LOCK TABLE "member"     IN SHARE ROW EXCLUSIVE MODE;
     LOCK TABLE "area"       IN EXCLUSIVE MODE;
     LOCK TABLE "membership" IN SHARE ROW EXCLUSIVE MODE;
     -- NOTE: "member", "area" and "membership" are locked first to
     -- prevent deadlocks in combination with "calculate_member_counts"()
     LOCK TABLE "policy"     IN EXCLUSIVE MODE;
     LOCK TABLE "issue"      IN EXCLUSIVE MODE;
     LOCK TABLE "initiative" IN EXCLUSIVE MODE;
     LOCK TABLE "draft"      IN EXCLUSIVE MODE;
     LOCK TABLE "suggestion" IN EXCLUSIVE MODE;
     LOCK TABLE "interest"   IN SHARE ROW EXCLUSIVE MODE;
     LOCK TABLE "initiator"  IN EXCLUSIVE MODE;
     LOCK TABLE "supporter"  IN EXCLUSIVE MODE;
     LOCK TABLE "opinion"    IN EXCLUSIVE MODE;
     LOCK TABLE "delegation" IN EXCLUSIVE MODE;
     LOCK TABLE "direct_population_snapshot"     IN EXCLUSIVE MODE;
     LOCK TABLE "delegating_population_snapshot" IN EXCLUSIVE MODE;
     LOCK TABLE "direct_interest_snapshot"       IN EXCLUSIVE MODE;
     LOCK TABLE "delegating_interest_snapshot"   IN EXCLUSIVE MODE;
     LOCK TABLE "direct_supporter_snapshot"      IN EXCLUSIVE MODE;
     LOCK TABLE "direct_voter"     IN EXCLUSIVE MODE;
     LOCK TABLE "delegating_voter" IN EXCLUSIVE MODE;
     LOCK TABLE "vote"             IN EXCLUSIVE MODE;
     RETURN;
   END;
 $$;