LQPP/patch core123 function global lock 20100815-2.sql
< LQPP
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; $$;