-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplprofiler--4.2.sql
261 lines (231 loc) · 7.65 KB
/
plprofiler--4.2.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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
\echo Use "CREATE EXTENSION plprofiler" to load this file. \quit
DO $$
BEGIN
-- Create role plprofiler if it doesn't exist
IF NOT EXISTS (SELECT 1 FROM pg_catalog.pg_authid WHERE rolname = 'plprofiler') THEN
CREATE ROLE plprofiler WITH NOLOGIN;
END IF;
-- AWS RDS specific:
-- End users in RDS don't have access to a real postgres superuser.
-- Instead they need this role granted to the rds_superuser role.
IF EXISTS (SELECT 1 FROM pg_catalog.pg_authid WHERE rolname = 'rds_superuser') THEN
GRANT plprofiler TO rds_superuser WITH ADMIN OPTION;
END IF;
END;
$$ LANGUAGE plpgsql;
-- Register functions.
CREATE OR REPLACE FUNCTION pl_profiler_version()
RETURNS integer
AS $$
BEGIN
RETURN 40200;
END;
$$ STRICT LANGUAGE plpgsql;
ALTER FUNCTION pl_profiler_version() OWNER TO plprofiler;
GRANT EXECUTE ON FUNCTION pl_profiler_version() TO public;
CREATE OR REPLACE FUNCTION pl_profiler_versionstr()
RETURNS text
AS $$
BEGIN
RETURN '4.2';
END;
$$ STRICT LANGUAGE plpgsql;
ALTER FUNCTION pl_profiler_versionstr() OWNER TO plprofiler;
GRANT EXECUTE ON FUNCTION pl_profiler_versionstr() TO public;
CREATE FUNCTION pl_profiler_linestats_local(
OUT func_oid oid,
OUT line_number int8,
OUT exec_count int8,
OUT total_time int8,
OUT longest_time int8
)
RETURNS SETOF record
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C ROWS 1000000;
ALTER FUNCTION pl_profiler_linestats_local() OWNER TO plprofiler;
GRANT EXECUTE ON FUNCTION pl_profiler_linestats_local() TO public;
CREATE FUNCTION pl_profiler_linestats_shared(
OUT func_oid oid,
OUT line_number int8,
OUT exec_count int8,
OUT total_time int8,
OUT longest_time int8
)
RETURNS SETOF record
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C ROWS 1000000;
ALTER FUNCTION pl_profiler_linestats_shared() OWNER TO plprofiler;
CREATE FUNCTION pl_profiler_callgraph_local(
OUT stack oid[],
OUT call_count int8,
OUT us_total int8,
OUT us_children int8,
OUT us_self int8
)
RETURNS SETOF record
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C ROWS 1000000;
ALTER FUNCTION pl_profiler_callgraph_local() OWNER TO plprofiler;
GRANT EXECUTE ON FUNCTION pl_profiler_callgraph_local() TO public;
CREATE FUNCTION pl_profiler_callgraph_shared(
OUT stack oid[],
OUT call_count int8,
OUT us_total int8,
OUT us_children int8,
OUT us_self int8
)
RETURNS SETOF record
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C ROWS 1000000;
ALTER FUNCTION pl_profiler_callgraph_shared() OWNER TO plprofiler;
CREATE FUNCTION pl_profiler_func_oids_local()
RETURNS oid[]
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_func_oids_local() OWNER TO plprofiler;
GRANT EXECUTE ON FUNCTION pl_profiler_func_oids_local() TO public;
CREATE FUNCTION pl_profiler_func_oids_shared()
RETURNS oid[]
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_func_oids_shared() OWNER TO plprofiler;
CREATE FUNCTION pl_profiler_funcs_source(
IN func_oids oid[],
OUT func_oid oid,
OUT line_number int8,
OUT source text
)
RETURNS SETOF record
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C ROWS 1000000;
ALTER FUNCTION pl_profiler_funcs_source(oid[]) OWNER TO plprofiler;
GRANT EXECUTE ON FUNCTION pl_profiler_funcs_source(oid[]) TO public;
CREATE FUNCTION pl_profiler_get_stack(stack oid[])
RETURNS text[]
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_get_stack(oid[]) OWNER TO plprofiler;
GRANT EXECUTE ON FUNCTION pl_profiler_get_stack(oid[]) TO public;
CREATE FUNCTION pl_profiler_reset_local()
RETURNS void
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_reset_local() OWNER TO plprofiler;
GRANT EXECUTE ON FUNCTION pl_profiler_reset_local() TO public;
CREATE FUNCTION pl_profiler_reset_shared()
RETURNS void
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_reset_shared() OWNER TO plprofiler;
CREATE FUNCTION pl_profiler_set_enabled_global(enabled bool)
RETURNS bool
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_set_enabled_global(bool) OWNER TO plprofiler;
CREATE FUNCTION pl_profiler_get_enabled_global()
RETURNS bool
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_get_enabled_global() OWNER TO plprofiler;
GRANT EXECUTE ON FUNCTION pl_profiler_get_enabled_global() TO public;
CREATE FUNCTION pl_profiler_set_enabled_local(enabled bool)
RETURNS bool
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_set_enabled_local(bool) OWNER TO plprofiler;
GRANT EXECUTE ON FUNCTION pl_profiler_set_enabled_local(bool) TO public;
CREATE FUNCTION pl_profiler_get_enabled_local()
RETURNS bool
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_get_enabled_local() OWNER TO plprofiler;
GRANT EXECUTE ON FUNCTION pl_profiler_get_enabled_local() TO public;
CREATE FUNCTION pl_profiler_set_enabled_pid(pid int4)
RETURNS bool
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_set_enabled_pid(int4) OWNER TO plprofiler;
CREATE FUNCTION pl_profiler_get_enabled_pid()
RETURNS bool
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_get_enabled_pid() OWNER TO plprofiler;
GRANT EXECUTE ON FUNCTION pl_profiler_get_enabled_pid() TO public;
CREATE FUNCTION pl_profiler_set_collect_interval(seconds int4)
RETURNS bool
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_set_collect_interval(int4) OWNER TO plprofiler;
CREATE FUNCTION pl_profiler_get_collect_interval()
RETURNS bool
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_get_collect_interval() OWNER TO plprofiler;
GRANT EXECUTE ON FUNCTION pl_profiler_get_collect_interval() TO public;
CREATE FUNCTION pl_profiler_collect_data()
RETURNS int4
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_collect_data() OWNER TO plprofiler;
CREATE FUNCTION pl_profiler_callgraph_overflow()
RETURNS bool
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_callgraph_overflow() OWNER TO plprofiler;
CREATE FUNCTION pl_profiler_functions_overflow()
RETURNS bool
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_functions_overflow() OWNER TO plprofiler;
CREATE FUNCTION pl_profiler_lines_overflow()
RETURNS bool
AS 'MODULE_PATHNAME'
STRICT LANGUAGE C;
ALTER FUNCTION pl_profiler_lines_overflow() OWNER TO plprofiler;
CREATE TABLE pl_profiler_saved (
s_id serial PRIMARY KEY,
s_name text NOT NULL UNIQUE,
s_options text NOT NULL DEFAULT '',
s_callgraph_overflow bool,
s_functions_overflow bool,
s_lines_overflow bool
);
ALTER TABLE pl_profiler_saved OWNER TO plprofiler;
CREATE TABLE pl_profiler_saved_functions (
f_s_id integer NOT NULL
REFERENCES pl_profiler_saved
ON DELETE CASCADE,
f_funcoid int8 NOT NULL,
f_schema text NOT NULL,
f_funcname text NOT NULL,
f_funcresult text NOT NULL,
f_funcargs text NOT NULL,
PRIMARY KEY (f_s_id, f_funcoid)
);
ALTER TABLE pl_profiler_saved_functions OWNER TO plprofiler;
CREATE TABLE pl_profiler_saved_linestats (
l_s_id integer NOT NULL
REFERENCES pl_profiler_saved
ON DELETE CASCADE,
l_funcoid int8 NOT NULL,
l_line_number int4 NOT NULL,
l_source text,
l_exec_count bigint,
l_total_time bigint,
l_longest_time bigint,
PRIMARY KEY (l_s_id, l_funcoid, l_line_number)
);
ALTER TABLE pl_profiler_saved_linestats OWNER TO plprofiler;
CREATE TABLE pl_profiler_saved_callgraph (
c_s_id integer NOT NULL
REFERENCES pl_profiler_saved
ON DELETE CASCADE,
c_stack text[] NOT NULL,
c_call_count bigint,
c_us_total bigint,
c_us_children bigint,
c_us_self bigint,
PRIMARY KEY (c_s_id, c_stack)
);
ALTER TABLE pl_profiler_saved_callgraph OWNER TO plprofiler;