-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathpowa--5.0.0--5.0.1.sql
99 lines (85 loc) · 3.12 KB
/
powa--5.0.0--5.0.1.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
\echo Use "ALTER EXTENSION powa" to load this file. \quit
ALTER TABLE @[email protected]_module_config DROP COLUMN added_manually;
SELECT pg_catalog.pg_extension_config_dump('@[email protected]_module_config','');
SELECT pg_catalog.pg_extension_config_dump('@[email protected]_module_functions','');
CREATE OR REPLACE FUNCTION @[email protected]_activate_module(_srvid int, _module text) RETURNS boolean
AS $_$
DECLARE
v_res bool;
BEGIN
IF (_srvid IS NULL) THEN
RAISE EXCEPTION 'powa_activate_module: no server id provided';
END IF;
IF (_module IS NULL) THEN
RAISE EXCEPTION 'powa_activate_module: no module provided';
END IF;
-- Check that the module is known.
SELECT COUNT(*) = 1 INTO v_res
FROM @[email protected]_modules
WHERE module = _module;
IF (NOT v_res) THEN
RAISE EXCEPTION 'Module "%" is not known', _module;
END IF;
-- The record may already be present, but the enabled flag could be off.
-- If so simply enable it. Otherwise, add the needed record.
SELECT COUNT(*) > 0 INTO v_res
FROM @[email protected]_module_config
WHERE module = _module
AND srvid = _srvid;
IF (v_res) THEN
UPDATE @[email protected]_module_config
SET enabled = true
WHERE enabled = false
AND srvid = _srvid
AND module = _module;
ELSE
INSERT INTO @[email protected]_module_config
(srvid, module)
VALUES
(_srvid, _module);
END IF;
RETURN true;
END;
$_$ LANGUAGE plpgsql
SET search_path = pg_catalog; /* end of powa_activate_module */
CREATE OR REPLACE FUNCTION @[email protected]_delete_and_purge_server(_srvid integer) RETURNS boolean
AS $_$
DECLARE
v_rowcount bigint;
v_extnsp text;
BEGIN
IF (_srvid = 0) THEN
RAISE EXCEPTION 'Local server cannot be deleted';
END IF;
DELETE FROM @[email protected]_servers WHERE id = _srvid;
GET DIAGNOSTICS v_rowcount = ROW_COUNT;
-- pg_track_settings is an autonomous extension, so it doesn't have a FK to
-- powa_servers. It therefore needs to be processed manually
SELECT COUNT(*), nspname
FROM pg_extension e
LEFT JOIN pg_namespace n ON n.oid = e.extnamespace
WHERE extname = 'pg_track_settings'
GROUP BY nspname
INTO v_rowcount, v_extnsp;
IF (v_rowcount = 1) THEN
EXECUTE format('DELETE FROM %I.pg_track_settings_list WHERE srvid = %s',
v_extnsp,
_srvid);
EXECUTE format('DELETE FROM %I.pg_track_settings_history WHERE srvid = %s',
v_extnsp,
_srvid);
EXECUTE format('DELETE FROM %I.pg_track_db_role_settings_list WHERE srvid = %s',
v_extnsp,
_srvid);
EXECUTE format('DELETE FROM %I.pg_track_db_role_settings_history WHERE srvid = %s',
v_extnsp,
_srvid);
EXECUTE format('DELETE FROM %I.pg_reboot WHERE srvid = %s',
v_extnsp,
_srvid);
END IF;
RETURN v_rowcount = 1;
END;
$_$ LANGUAGE plpgsql
SET search_path = pg_catalog; /* powa_delete_and_purge_server */