codekingpro/portable-devtools
115k
1/*2 * PostgreSQL System Functions3 *4 * Copyright (c) 1996-2023, PostgreSQL Global Development Group5 *6 * src/backend/catalog/system_functions.sql7 *8 * This file redefines certain built-in functions that it's impractical9 * to fully define in pg_proc.dat. In most cases that's because they use10 * SQL-standard function bodies and/or default expressions. The node11 * tree representations of those are too unreadable, platform-dependent,12 * and changeable to want to deal with them manually. Hence, we put stub13 * definitions of such functions into pg_proc.dat and then replace them14 * here. The stub definitions would be unnecessary were it not that we'd15 * like these functions to have stable OIDs, the same as other built-in16 * functions.17 *18 * This file also takes care of adjusting privileges for those functions19 * that should not have the default public-EXECUTE privileges. (However,20 * a small number of functions that exist mainly to underlie system views21 * are dealt with in system_views.sql, instead.)22 *23 * Note: this file is read in single-user -j mode, which means that the24 * command terminator is semicolon-newline-newline; whenever the backend25 * sees that, it stops and executes what it's got. If you write a lot of26 * statements without empty lines between, they'll all get quoted to you27 * in any error message about one of them, so don't do that. Also, you28 * cannot write a semicolon immediately followed by an empty line in a29 * string literal (including a function body!) or a multiline comment.30 */31 32 33CREATE OR REPLACE FUNCTION lpad(text, integer)34 RETURNS text35 LANGUAGE sql36 IMMUTABLE PARALLEL SAFE STRICT COST 137RETURN lpad($1, $2, ' ');38 39CREATE OR REPLACE FUNCTION rpad(text, integer)40 RETURNS text41 LANGUAGE sql42 IMMUTABLE PARALLEL SAFE STRICT COST 143RETURN rpad($1, $2, ' ');44 45CREATE OR REPLACE FUNCTION "substring"(text, text, text)46 RETURNS text47 LANGUAGE sql48 IMMUTABLE PARALLEL SAFE STRICT COST 149RETURN substring($1, similar_to_escape($2, $3));50 51CREATE OR REPLACE FUNCTION bit_length(bit)52 RETURNS integer53 LANGUAGE sql54 IMMUTABLE PARALLEL SAFE STRICT COST 155RETURN length($1);56 57CREATE OR REPLACE FUNCTION bit_length(bytea)58 RETURNS integer59 LANGUAGE sql60 IMMUTABLE PARALLEL SAFE STRICT COST 161RETURN octet_length($1) * 8;62 63CREATE OR REPLACE FUNCTION bit_length(text)64 RETURNS integer65 LANGUAGE sql66 IMMUTABLE PARALLEL SAFE STRICT COST 167RETURN octet_length($1) * 8;68 69CREATE OR REPLACE FUNCTION70 random_normal(mean float8 DEFAULT 0, stddev float8 DEFAULT 1)71 RETURNS float872 LANGUAGE internal73 VOLATILE PARALLEL RESTRICTED STRICT COST 174AS 'drandom_normal';75 76CREATE OR REPLACE FUNCTION log(numeric)77 RETURNS numeric78 LANGUAGE sql79 IMMUTABLE PARALLEL SAFE STRICT COST 180RETURN log(10, $1);81 82CREATE OR REPLACE FUNCTION log10(numeric)83 RETURNS numeric84 LANGUAGE sql85 IMMUTABLE PARALLEL SAFE STRICT COST 186RETURN log(10, $1);87 88CREATE OR REPLACE FUNCTION round(numeric)89 RETURNS numeric90 LANGUAGE sql91 IMMUTABLE PARALLEL SAFE STRICT COST 192RETURN round($1, 0);93 94CREATE OR REPLACE FUNCTION trunc(numeric)95 RETURNS numeric96 LANGUAGE sql97 IMMUTABLE PARALLEL SAFE STRICT COST 198RETURN trunc($1, 0);99 100CREATE OR REPLACE FUNCTION numeric_pl_pg_lsn(numeric, pg_lsn)101 RETURNS pg_lsn102 LANGUAGE sql103 IMMUTABLE PARALLEL SAFE STRICT COST 1104RETURN $2 + $1;105 106CREATE OR REPLACE FUNCTION path_contain_pt(path, point)107 RETURNS boolean108 LANGUAGE sql109 IMMUTABLE PARALLEL SAFE STRICT COST 1110RETURN on_ppath($2, $1);111 112CREATE OR REPLACE FUNCTION polygon(circle)113 RETURNS polygon114 LANGUAGE sql115 IMMUTABLE PARALLEL SAFE STRICT COST 1116RETURN polygon(12, $1);117 118CREATE OR REPLACE FUNCTION age(timestamptz)119 RETURNS interval120 LANGUAGE sql121 STABLE PARALLEL SAFE STRICT COST 1122RETURN age(cast(current_date as timestamptz), $1);123 124CREATE OR REPLACE FUNCTION age(timestamp)125 RETURNS interval126 LANGUAGE sql127 STABLE PARALLEL SAFE STRICT COST 1128RETURN age(cast(current_date as timestamp), $1);129 130CREATE OR REPLACE FUNCTION date_part(text, date)131 RETURNS double precision132 LANGUAGE sql133 IMMUTABLE PARALLEL SAFE STRICT COST 1134RETURN date_part($1, cast($2 as timestamp));135 136CREATE OR REPLACE FUNCTION timestamptz(date, time)137 RETURNS timestamptz138 LANGUAGE sql139 STABLE PARALLEL SAFE STRICT COST 1140RETURN cast(($1 + $2) as timestamptz);141 142CREATE OR REPLACE FUNCTION timedate_pl(time, date)143 RETURNS timestamp144 LANGUAGE sql145 IMMUTABLE PARALLEL SAFE STRICT COST 1146RETURN $2 + $1;147 148CREATE OR REPLACE FUNCTION timetzdate_pl(timetz, date)149 RETURNS timestamptz150 LANGUAGE sql151 IMMUTABLE PARALLEL SAFE STRICT COST 1152RETURN $2 + $1;153 154CREATE OR REPLACE FUNCTION interval_pl_time(interval, time)155 RETURNS time156 LANGUAGE sql157 IMMUTABLE PARALLEL SAFE STRICT COST 1158RETURN $2 + $1;159 160CREATE OR REPLACE FUNCTION interval_pl_date(interval, date)161 RETURNS timestamp162 LANGUAGE sql163 IMMUTABLE PARALLEL SAFE STRICT COST 1164RETURN $2 + $1;165 166CREATE OR REPLACE FUNCTION interval_pl_timetz(interval, timetz)167 RETURNS timetz168 LANGUAGE sql169 IMMUTABLE PARALLEL SAFE STRICT COST 1170RETURN $2 + $1;171 172CREATE OR REPLACE FUNCTION interval_pl_timestamp(interval, timestamp)173 RETURNS timestamp174 LANGUAGE sql175 IMMUTABLE PARALLEL SAFE STRICT COST 1176RETURN $2 + $1;177 178CREATE OR REPLACE FUNCTION interval_pl_timestamptz(interval, timestamptz)179 RETURNS timestamptz180 LANGUAGE sql181 STABLE PARALLEL SAFE STRICT COST 1182RETURN $2 + $1;183 184CREATE OR REPLACE FUNCTION integer_pl_date(integer, date)185 RETURNS date186 LANGUAGE sql187 IMMUTABLE PARALLEL SAFE STRICT COST 1188RETURN $2 + $1;189 190CREATE OR REPLACE FUNCTION "overlaps"(timestamptz, timestamptz,191 timestamptz, interval)192 RETURNS boolean193 LANGUAGE sql194 STABLE PARALLEL SAFE COST 1195RETURN ($1, $2) overlaps ($3, ($3 + $4));196 197CREATE OR REPLACE FUNCTION "overlaps"(timestamptz, interval,198 timestamptz, interval)199 RETURNS boolean200 LANGUAGE sql201 STABLE PARALLEL SAFE COST 1202RETURN ($1, ($1 + $2)) overlaps ($3, ($3 + $4));203 204CREATE OR REPLACE FUNCTION "overlaps"(timestamptz, interval,205 timestamptz, timestamptz)206 RETURNS boolean207 LANGUAGE sql208 STABLE PARALLEL SAFE COST 1209RETURN ($1, ($1 + $2)) overlaps ($3, $4);210 211CREATE OR REPLACE FUNCTION "overlaps"(timestamp, timestamp,212 timestamp, interval)213 RETURNS boolean214 LANGUAGE sql215 IMMUTABLE PARALLEL SAFE COST 1216RETURN ($1, $2) overlaps ($3, ($3 + $4));217 218CREATE OR REPLACE FUNCTION "overlaps"(timestamp, interval,219 timestamp, timestamp)220 RETURNS boolean221 LANGUAGE sql222 IMMUTABLE PARALLEL SAFE COST 1223RETURN ($1, ($1 + $2)) overlaps ($3, $4);224 225CREATE OR REPLACE FUNCTION "overlaps"(timestamp, interval,226 timestamp, interval)227 RETURNS boolean228 LANGUAGE sql229 IMMUTABLE PARALLEL SAFE COST 1230RETURN ($1, ($1 + $2)) overlaps ($3, ($3 + $4));231 232CREATE OR REPLACE FUNCTION "overlaps"(time, interval,233 time, interval)234 RETURNS boolean235 LANGUAGE sql236 IMMUTABLE PARALLEL SAFE COST 1237RETURN ($1, ($1 + $2)) overlaps ($3, ($3 + $4));238 239CREATE OR REPLACE FUNCTION "overlaps"(time, time,240 time, interval)241 RETURNS boolean242 LANGUAGE sql243 IMMUTABLE PARALLEL SAFE COST 1244RETURN ($1, $2) overlaps ($3, ($3 + $4));245 246CREATE OR REPLACE FUNCTION "overlaps"(time, interval,247 time, time)248 RETURNS boolean249 LANGUAGE sql250 IMMUTABLE PARALLEL SAFE COST 1251RETURN ($1, ($1 + $2)) overlaps ($3, $4);252 253CREATE OR REPLACE FUNCTION int8pl_inet(bigint, inet)254 RETURNS inet255 LANGUAGE sql256 IMMUTABLE PARALLEL SAFE STRICT COST 1257RETURN $2 + $1;258 259CREATE OR REPLACE FUNCTION xpath(text, xml)260 RETURNS xml[]261 LANGUAGE sql262 IMMUTABLE PARALLEL SAFE STRICT COST 1263RETURN xpath($1, $2, '{}'::text[]);264 265CREATE OR REPLACE FUNCTION xpath_exists(text, xml)266 RETURNS boolean267 LANGUAGE sql268 IMMUTABLE PARALLEL SAFE STRICT COST 1269RETURN xpath_exists($1, $2, '{}'::text[]);270 271CREATE OR REPLACE FUNCTION pg_sleep_for(interval)272 RETURNS void273 LANGUAGE sql274 PARALLEL SAFE STRICT COST 1275RETURN pg_sleep(extract(epoch from clock_timestamp() + $1) -276 extract(epoch from clock_timestamp()));277 278CREATE OR REPLACE FUNCTION pg_sleep_until(timestamptz)279 RETURNS void280 LANGUAGE sql281 PARALLEL SAFE STRICT COST 1282RETURN pg_sleep(extract(epoch from $1) -283 extract(epoch from clock_timestamp()));284 285CREATE OR REPLACE FUNCTION pg_relation_size(regclass)286 RETURNS bigint287 LANGUAGE sql288 PARALLEL SAFE STRICT COST 1289RETURN pg_relation_size($1, 'main');290 291CREATE OR REPLACE FUNCTION obj_description(oid, name)292 RETURNS text293 LANGUAGE sql294 STABLE PARALLEL SAFE STRICT295BEGIN ATOMIC296select description from pg_description297 where objoid = $1 and298 classoid = (select oid from pg_class where relname = $2 and299 relnamespace = 'pg_catalog'::regnamespace) and300 objsubid = 0;301END;302 303CREATE OR REPLACE FUNCTION shobj_description(oid, name)304 RETURNS text305 LANGUAGE sql306 STABLE PARALLEL SAFE STRICT307BEGIN ATOMIC308select description from pg_shdescription309 where objoid = $1 and310 classoid = (select oid from pg_class where relname = $2 and311 relnamespace = 'pg_catalog'::regnamespace);312END;313 314CREATE OR REPLACE FUNCTION obj_description(oid)315 RETURNS text316 LANGUAGE sql317 STABLE PARALLEL SAFE STRICT318BEGIN ATOMIC319select description from pg_description where objoid = $1 and objsubid = 0;320END;321 322CREATE OR REPLACE FUNCTION col_description(oid, integer)323 RETURNS text324 LANGUAGE sql325 STABLE PARALLEL SAFE STRICT326BEGIN ATOMIC327select description from pg_description328 where objoid = $1 and classoid = 'pg_class'::regclass and objsubid = $2;329END;330 331CREATE OR REPLACE FUNCTION ts_debug(config regconfig, document text,332 OUT alias text,333 OUT description text,334 OUT token text,335 OUT dictionaries regdictionary[],336 OUT dictionary regdictionary,337 OUT lexemes text[])338 RETURNS SETOF record339 LANGUAGE sql340 STABLE PARALLEL SAFE STRICT341BEGIN ATOMIC342select343 tt.alias AS alias,344 tt.description AS description,345 parse.token AS token,346 ARRAY ( SELECT m.mapdict::regdictionary347 FROM pg_ts_config_map AS m348 WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid349 ORDER BY m.mapseqno )350 AS dictionaries,351 ( SELECT mapdict::regdictionary352 FROM pg_ts_config_map AS m353 WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid354 ORDER BY ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno355 LIMIT 1356 ) AS dictionary,357 ( SELECT ts_lexize(mapdict, parse.token)358 FROM pg_ts_config_map AS m359 WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid360 ORDER BY ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno361 LIMIT 1362 ) AS lexemes363FROM ts_parse(364 (SELECT cfgparser FROM pg_ts_config WHERE oid = $1 ), $2365 ) AS parse,366 ts_token_type(367 (SELECT cfgparser FROM pg_ts_config WHERE oid = $1 )368 ) AS tt369WHERE tt.tokid = parse.tokid;370END;371 372CREATE OR REPLACE FUNCTION ts_debug(document text,373 OUT alias text,374 OUT description text,375 OUT token text,376 OUT dictionaries regdictionary[],377 OUT dictionary regdictionary,378 OUT lexemes text[])379 RETURNS SETOF record380 LANGUAGE sql381 STABLE PARALLEL SAFE STRICT382BEGIN ATOMIC383 SELECT * FROM ts_debug(get_current_ts_config(), $1);384END;385 386CREATE OR REPLACE FUNCTION387 pg_backup_start(label text, fast boolean DEFAULT false)388 RETURNS pg_lsn STRICT VOLATILE LANGUAGE internal AS 'pg_backup_start'389 PARALLEL RESTRICTED;390 391CREATE OR REPLACE FUNCTION pg_backup_stop (392 wait_for_archive boolean DEFAULT true, OUT lsn pg_lsn,393 OUT labelfile text, OUT spcmapfile text)394 RETURNS record STRICT VOLATILE LANGUAGE internal as 'pg_backup_stop'395 PARALLEL RESTRICTED;396 397CREATE OR REPLACE FUNCTION398 pg_promote(wait boolean DEFAULT true, wait_seconds integer DEFAULT 60)399 RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_promote'400 PARALLEL SAFE;401 402CREATE OR REPLACE FUNCTION403 pg_terminate_backend(pid integer, timeout int8 DEFAULT 0)404 RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_terminate_backend'405 PARALLEL SAFE;406 407-- legacy definition for compatibility with 9.3408CREATE OR REPLACE FUNCTION409 json_populate_record(base anyelement, from_json json, use_json_as_text boolean DEFAULT false)410 RETURNS anyelement LANGUAGE internal STABLE AS 'json_populate_record' PARALLEL SAFE;411 412-- legacy definition for compatibility with 9.3413CREATE OR REPLACE FUNCTION414 json_populate_recordset(base anyelement, from_json json, use_json_as_text boolean DEFAULT false)415 RETURNS SETOF anyelement LANGUAGE internal STABLE ROWS 100 AS 'json_populate_recordset' PARALLEL SAFE;416 417CREATE OR REPLACE FUNCTION pg_logical_slot_get_changes(418 IN slot_name name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}',419 OUT lsn pg_lsn, OUT xid xid, OUT data text)420RETURNS SETOF RECORD421LANGUAGE INTERNAL422VOLATILE ROWS 1000 COST 1000423AS 'pg_logical_slot_get_changes';424 425CREATE OR REPLACE FUNCTION pg_logical_slot_peek_changes(426 IN slot_name name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}',427 OUT lsn pg_lsn, OUT xid xid, OUT data text)428RETURNS SETOF RECORD429LANGUAGE INTERNAL430VOLATILE ROWS 1000 COST 1000431AS 'pg_logical_slot_peek_changes';432 433CREATE OR REPLACE FUNCTION pg_logical_slot_get_binary_changes(434 IN slot_name name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}',435 OUT lsn pg_lsn, OUT xid xid, OUT data bytea)436RETURNS SETOF RECORD437LANGUAGE INTERNAL438VOLATILE ROWS 1000 COST 1000439AS 'pg_logical_slot_get_binary_changes';440 441CREATE OR REPLACE FUNCTION pg_logical_slot_peek_binary_changes(442 IN slot_name name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}',443 OUT lsn pg_lsn, OUT xid xid, OUT data bytea)444RETURNS SETOF RECORD445LANGUAGE INTERNAL446VOLATILE ROWS 1000 COST 1000447AS 'pg_logical_slot_peek_binary_changes';448 449CREATE OR REPLACE FUNCTION pg_create_physical_replication_slot(450 IN slot_name name, IN immediately_reserve boolean DEFAULT false,451 IN temporary boolean DEFAULT false,452 OUT slot_name name, OUT lsn pg_lsn)453RETURNS RECORD454LANGUAGE INTERNAL455STRICT VOLATILE456AS 'pg_create_physical_replication_slot';457 458CREATE OR REPLACE FUNCTION pg_create_logical_replication_slot(459 IN slot_name name, IN plugin name,460 IN temporary boolean DEFAULT false,461 IN twophase boolean DEFAULT false,462 OUT slot_name name, OUT lsn pg_lsn)463RETURNS RECORD464LANGUAGE INTERNAL465STRICT VOLATILE466AS 'pg_create_logical_replication_slot';467 468CREATE OR REPLACE FUNCTION469 make_interval(years int4 DEFAULT 0, months int4 DEFAULT 0, weeks int4 DEFAULT 0,470 days int4 DEFAULT 0, hours int4 DEFAULT 0, mins int4 DEFAULT 0,471 secs double precision DEFAULT 0.0)472RETURNS interval473LANGUAGE INTERNAL474STRICT IMMUTABLE PARALLEL SAFE475AS 'make_interval';476 477CREATE OR REPLACE FUNCTION478 jsonb_set(jsonb_in jsonb, path text[] , replacement jsonb,479 create_if_missing boolean DEFAULT true)480RETURNS jsonb481LANGUAGE INTERNAL482STRICT IMMUTABLE PARALLEL SAFE483AS 'jsonb_set';484 485CREATE OR REPLACE FUNCTION486 jsonb_set_lax(jsonb_in jsonb, path text[] , replacement jsonb,487 create_if_missing boolean DEFAULT true,488 null_value_treatment text DEFAULT 'use_json_null')489RETURNS jsonb490LANGUAGE INTERNAL491CALLED ON NULL INPUT IMMUTABLE PARALLEL SAFE492AS 'jsonb_set_lax';493 494CREATE OR REPLACE FUNCTION495 parse_ident(str text, strict boolean DEFAULT true)496RETURNS text[]497LANGUAGE INTERNAL498STRICT IMMUTABLE PARALLEL SAFE499AS 'parse_ident';500 501CREATE OR REPLACE FUNCTION502 jsonb_insert(jsonb_in jsonb, path text[] , replacement jsonb,503 insert_after boolean DEFAULT false)504RETURNS jsonb505LANGUAGE INTERNAL506STRICT IMMUTABLE PARALLEL SAFE507AS 'jsonb_insert';508 509CREATE OR REPLACE FUNCTION510 jsonb_path_exists(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',511 silent boolean DEFAULT false)512RETURNS boolean513LANGUAGE INTERNAL514STRICT IMMUTABLE PARALLEL SAFE515AS 'jsonb_path_exists';516 517CREATE OR REPLACE FUNCTION518 jsonb_path_match(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',519 silent boolean DEFAULT false)520RETURNS boolean521LANGUAGE INTERNAL522STRICT IMMUTABLE PARALLEL SAFE523AS 'jsonb_path_match';524 525CREATE OR REPLACE FUNCTION526 jsonb_path_query(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',527 silent boolean DEFAULT false)528RETURNS SETOF jsonb529LANGUAGE INTERNAL530STRICT IMMUTABLE PARALLEL SAFE531AS 'jsonb_path_query';532 533CREATE OR REPLACE FUNCTION534 jsonb_path_query_array(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',535 silent boolean DEFAULT false)536RETURNS jsonb537LANGUAGE INTERNAL538STRICT IMMUTABLE PARALLEL SAFE539AS 'jsonb_path_query_array';540 541CREATE OR REPLACE FUNCTION542 jsonb_path_query_first(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',543 silent boolean DEFAULT false)544RETURNS jsonb545LANGUAGE INTERNAL546STRICT IMMUTABLE PARALLEL SAFE547AS 'jsonb_path_query_first';548 549CREATE OR REPLACE FUNCTION550 jsonb_path_exists_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',551 silent boolean DEFAULT false)552RETURNS boolean553LANGUAGE INTERNAL554STRICT STABLE PARALLEL SAFE555AS 'jsonb_path_exists_tz';556 557CREATE OR REPLACE FUNCTION558 jsonb_path_match_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',559 silent boolean DEFAULT false)560RETURNS boolean561LANGUAGE INTERNAL562STRICT STABLE PARALLEL SAFE563AS 'jsonb_path_match_tz';564 565CREATE OR REPLACE FUNCTION566 jsonb_path_query_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',567 silent boolean DEFAULT false)568RETURNS SETOF jsonb569LANGUAGE INTERNAL570STRICT STABLE PARALLEL SAFE571AS 'jsonb_path_query_tz';572 573CREATE OR REPLACE FUNCTION574 jsonb_path_query_array_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',575 silent boolean DEFAULT false)576RETURNS jsonb577LANGUAGE INTERNAL578STRICT STABLE PARALLEL SAFE579AS 'jsonb_path_query_array_tz';580 581CREATE OR REPLACE FUNCTION582 jsonb_path_query_first_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',583 silent boolean DEFAULT false)584RETURNS jsonb585LANGUAGE INTERNAL586STRICT STABLE PARALLEL SAFE587AS 'jsonb_path_query_first_tz';588 589-- default normalization form is NFC, per SQL standard590CREATE OR REPLACE FUNCTION591 "normalize"(text, text DEFAULT 'NFC')592RETURNS text593LANGUAGE internal594STRICT IMMUTABLE PARALLEL SAFE595AS 'unicode_normalize_func';596 597CREATE OR REPLACE FUNCTION598 is_normalized(text, text DEFAULT 'NFC')599RETURNS boolean600LANGUAGE internal601STRICT IMMUTABLE PARALLEL SAFE602AS 'unicode_is_normalized';603 604--605-- The default permissions for functions mean that anyone can execute them.606-- A number of functions shouldn't be executable by just anyone, but rather607-- than use explicit 'superuser()' checks in those functions, we use the GRANT608-- system to REVOKE access to those functions at initdb time. Administrators609-- can later change who can access these functions, or leave them as only610-- available to superuser / cluster owner, if they choose.611--612 613REVOKE EXECUTE ON FUNCTION pg_backup_start(text, boolean) FROM public;614 615REVOKE EXECUTE ON FUNCTION pg_backup_stop(boolean) FROM public;616 617REVOKE EXECUTE ON FUNCTION pg_create_restore_point(text) FROM public;618 619REVOKE EXECUTE ON FUNCTION pg_switch_wal() FROM public;620 621REVOKE EXECUTE ON FUNCTION pg_log_standby_snapshot() FROM public;622 623REVOKE EXECUTE ON FUNCTION pg_wal_replay_pause() FROM public;624 625REVOKE EXECUTE ON FUNCTION pg_wal_replay_resume() FROM public;626 627REVOKE EXECUTE ON FUNCTION pg_rotate_logfile() FROM public;628 629REVOKE EXECUTE ON FUNCTION pg_reload_conf() FROM public;630 631REVOKE EXECUTE ON FUNCTION pg_current_logfile() FROM public;632 633REVOKE EXECUTE ON FUNCTION pg_current_logfile(text) FROM public;634 635REVOKE EXECUTE ON FUNCTION pg_promote(boolean, integer) FROM public;636 637REVOKE EXECUTE ON FUNCTION pg_stat_reset() FROM public;638 639REVOKE EXECUTE ON FUNCTION pg_stat_reset_shared(text) FROM public;640 641REVOKE EXECUTE ON FUNCTION pg_stat_reset_slru(text) FROM public;642 643REVOKE EXECUTE ON FUNCTION pg_stat_reset_single_table_counters(oid) FROM public;644 645REVOKE EXECUTE ON FUNCTION pg_stat_reset_single_function_counters(oid) FROM public;646 647REVOKE EXECUTE ON FUNCTION pg_stat_reset_replication_slot(text) FROM public;648 649REVOKE EXECUTE ON FUNCTION pg_stat_have_stats(text, oid, oid) FROM public;650 651REVOKE EXECUTE ON FUNCTION pg_stat_reset_subscription_stats(oid) FROM public;652 653REVOKE EXECUTE ON FUNCTION lo_import(text) FROM public;654 655REVOKE EXECUTE ON FUNCTION lo_import(text, oid) FROM public;656 657REVOKE EXECUTE ON FUNCTION lo_export(oid, text) FROM public;658 659REVOKE EXECUTE ON FUNCTION pg_ls_logdir() FROM public;660 661REVOKE EXECUTE ON FUNCTION pg_ls_waldir() FROM public;662 663REVOKE EXECUTE ON FUNCTION pg_ls_archive_statusdir() FROM public;664 665REVOKE EXECUTE ON FUNCTION pg_ls_tmpdir() FROM public;666 667REVOKE EXECUTE ON FUNCTION pg_ls_tmpdir(oid) FROM public;668 669REVOKE EXECUTE ON FUNCTION pg_read_file(text) FROM public;670 671REVOKE EXECUTE ON FUNCTION pg_read_file(text,boolean) FROM public;672 673REVOKE EXECUTE ON FUNCTION pg_read_file(text,bigint,bigint) FROM public;674 675REVOKE EXECUTE ON FUNCTION pg_read_file(text,bigint,bigint,boolean) FROM public;676 677REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text) FROM public;678 679REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text,boolean) FROM public;680 681REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text,bigint,bigint) FROM public;682 683REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text,bigint,bigint,boolean) FROM public;684 685REVOKE EXECUTE ON FUNCTION pg_replication_origin_advance(text, pg_lsn) FROM public;686 687REVOKE EXECUTE ON FUNCTION pg_replication_origin_create(text) FROM public;688 689REVOKE EXECUTE ON FUNCTION pg_replication_origin_drop(text) FROM public;690 691REVOKE EXECUTE ON FUNCTION pg_replication_origin_oid(text) FROM public;692 693REVOKE EXECUTE ON FUNCTION pg_replication_origin_progress(text, boolean) FROM public;694 695REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_is_setup() FROM public;696 697REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_progress(boolean) FROM public;698 699REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_reset() FROM public;700 701REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_setup(text) FROM public;702 703REVOKE EXECUTE ON FUNCTION pg_replication_origin_xact_reset() FROM public;704 705REVOKE EXECUTE ON FUNCTION pg_replication_origin_xact_setup(pg_lsn, timestamp with time zone) FROM public;706 707REVOKE EXECUTE ON FUNCTION pg_show_replication_origin_status() FROM public;708 709REVOKE EXECUTE ON FUNCTION pg_stat_file(text) FROM public;710 711REVOKE EXECUTE ON FUNCTION pg_stat_file(text,boolean) FROM public;712 713REVOKE EXECUTE ON FUNCTION pg_ls_dir(text) FROM public;714 715REVOKE EXECUTE ON FUNCTION pg_ls_dir(text,boolean,boolean) FROM public;716 717REVOKE EXECUTE ON FUNCTION pg_log_backend_memory_contexts(integer) FROM PUBLIC;718 719REVOKE EXECUTE ON FUNCTION pg_ls_logicalsnapdir() FROM PUBLIC;720 721REVOKE EXECUTE ON FUNCTION pg_ls_logicalmapdir() FROM PUBLIC;722 723REVOKE EXECUTE ON FUNCTION pg_ls_replslotdir(text) FROM PUBLIC;724 725--726-- We also set up some things as accessible to standard roles.727--728 729GRANT EXECUTE ON FUNCTION pg_ls_logdir() TO pg_monitor;730 731GRANT EXECUTE ON FUNCTION pg_ls_waldir() TO pg_monitor;732 733GRANT EXECUTE ON FUNCTION pg_ls_archive_statusdir() TO pg_monitor;734 735GRANT EXECUTE ON FUNCTION pg_ls_tmpdir() TO pg_monitor;736 737GRANT EXECUTE ON FUNCTION pg_ls_tmpdir(oid) TO pg_monitor;738 739GRANT EXECUTE ON FUNCTION pg_ls_logicalsnapdir() TO pg_monitor;740 741GRANT EXECUTE ON FUNCTION pg_ls_logicalmapdir() TO pg_monitor;742 743GRANT EXECUTE ON FUNCTION pg_ls_replslotdir(text) TO pg_monitor;744 745GRANT pg_read_all_settings TO pg_monitor;746 747GRANT pg_read_all_stats TO pg_monitor;748 749GRANT pg_stat_scan_tables TO pg_monitor;750 