Function Properties
Language: PLPGSQL
Return Type: integer
logswitch_finish() Attempt to finalize a log table switch in progressDECLARE v_current_status int4; v_dummy record; BEGIN -- ---- -- Grab the central configuration lock to prevent race conditions -- while changing the sl_log_status sequence value. -- ---- lock table sl_config_lock; -- ---- -- Get the current log status. -- ---- select last_value into v_current_status from sl_log_status; -- ---- -- status value 0 or 1 means that there is no log switch in progress -- ---- if v_current_status = 0 or v_current_status = 1 then return 0; end if; -- ---- -- status = 2: sl_log_1 active, cleanup sl_log_2 -- ---- if v_current_status = 2 then -- ---- -- The cleanup thread calls us after it did the delete and -- vacuum of both log tables. If sl_log_2 is empty now, we -- can truncate it and the log switch is done. -- ---- for v_dummy in select 1 from sl_log_2 loop -- ---- -- Found a row ... log switch is still in progress. -- ---- raise notice 'Slony-I: log switch to sl_log_1 still in progress - sl_log_2 not truncated'; return -1; end loop; raise notice 'Slony-I: log switch to sl_log_1 complete - truncate sl_log_2'; truncate sl_log_2; perform "pg_catalog".setval('sl_log_status', 0); -- Run addPartialLogIndices() to try to add indices to unused sl_log_? table perform addPartialLogIndices(); return 1; end if; -- ---- -- status = 3: sl_log_2 active, cleanup sl_log_1 -- ---- if v_current_status = 3 then -- ---- -- The cleanup thread calls us after it did the delete and -- vacuum of both log tables. If sl_log_2 is empty now, we -- can truncate it and the log switch is done. -- ---- for v_dummy in select 1 from sl_log_1 loop -- ---- -- Found a row ... log switch is still in progress. -- ---- raise notice 'Slony-I: log switch to sl_log_2 still in progress - sl_log_1 not truncated'; return -1; end loop; raise notice 'Slony-I: log switch to sl_log_2 complete - truncate sl_log_1'; truncate sl_log_1; perform "pg_catalog".setval('sl_log_status', 1); -- Run addPartialLogIndices() to try to add indices to unused sl_log_? table perform addPartialLogIndices(); return 2; end if; END;