system_functions.sql 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749
  1. /*
  2. * PostgreSQL System Functions
  3. *
  4. * Copyright (c) 1996-2023, PostgreSQL Global Development Group
  5. *
  6. * src/backend/catalog/system_functions.sql
  7. *
  8. * This file redefines certain built-in functions that it's impractical
  9. * to fully define in pg_proc.dat. In most cases that's because they use
  10. * SQL-standard function bodies and/or default expressions. The node
  11. * tree representations of those are too unreadable, platform-dependent,
  12. * and changeable to want to deal with them manually. Hence, we put stub
  13. * definitions of such functions into pg_proc.dat and then replace them
  14. * here. The stub definitions would be unnecessary were it not that we'd
  15. * like these functions to have stable OIDs, the same as other built-in
  16. * functions.
  17. *
  18. * This file also takes care of adjusting privileges for those functions
  19. * that should not have the default public-EXECUTE privileges. (However,
  20. * a small number of functions that exist mainly to underlie system views
  21. * are dealt with in system_views.sql, instead.)
  22. *
  23. * Note: this file is read in single-user -j mode, which means that the
  24. * command terminator is semicolon-newline-newline; whenever the backend
  25. * sees that, it stops and executes what it's got. If you write a lot of
  26. * statements without empty lines between, they'll all get quoted to you
  27. * in any error message about one of them, so don't do that. Also, you
  28. * cannot write a semicolon immediately followed by an empty line in a
  29. * string literal (including a function body!) or a multiline comment.
  30. */
  31. CREATE OR REPLACE FUNCTION lpad(text, integer)
  32. RETURNS text
  33. LANGUAGE sql
  34. IMMUTABLE PARALLEL SAFE STRICT COST 1
  35. RETURN lpad($1, $2, ' ');
  36. CREATE OR REPLACE FUNCTION rpad(text, integer)
  37. RETURNS text
  38. LANGUAGE sql
  39. IMMUTABLE PARALLEL SAFE STRICT COST 1
  40. RETURN rpad($1, $2, ' ');
  41. CREATE OR REPLACE FUNCTION "substring"(text, text, text)
  42. RETURNS text
  43. LANGUAGE sql
  44. IMMUTABLE PARALLEL SAFE STRICT COST 1
  45. RETURN substring($1, similar_to_escape($2, $3));
  46. CREATE OR REPLACE FUNCTION bit_length(bit)
  47. RETURNS integer
  48. LANGUAGE sql
  49. IMMUTABLE PARALLEL SAFE STRICT COST 1
  50. RETURN length($1);
  51. CREATE OR REPLACE FUNCTION bit_length(bytea)
  52. RETURNS integer
  53. LANGUAGE sql
  54. IMMUTABLE PARALLEL SAFE STRICT COST 1
  55. RETURN octet_length($1) * 8;
  56. CREATE OR REPLACE FUNCTION bit_length(text)
  57. RETURNS integer
  58. LANGUAGE sql
  59. IMMUTABLE PARALLEL SAFE STRICT COST 1
  60. RETURN octet_length($1) * 8;
  61. CREATE OR REPLACE FUNCTION
  62. random_normal(mean float8 DEFAULT 0, stddev float8 DEFAULT 1)
  63. RETURNS float8
  64. LANGUAGE internal
  65. VOLATILE PARALLEL RESTRICTED STRICT COST 1
  66. AS 'drandom_normal';
  67. CREATE OR REPLACE FUNCTION log(numeric)
  68. RETURNS numeric
  69. LANGUAGE sql
  70. IMMUTABLE PARALLEL SAFE STRICT COST 1
  71. RETURN log(10, $1);
  72. CREATE OR REPLACE FUNCTION log10(numeric)
  73. RETURNS numeric
  74. LANGUAGE sql
  75. IMMUTABLE PARALLEL SAFE STRICT COST 1
  76. RETURN log(10, $1);
  77. CREATE OR REPLACE FUNCTION round(numeric)
  78. RETURNS numeric
  79. LANGUAGE sql
  80. IMMUTABLE PARALLEL SAFE STRICT COST 1
  81. RETURN round($1, 0);
  82. CREATE OR REPLACE FUNCTION trunc(numeric)
  83. RETURNS numeric
  84. LANGUAGE sql
  85. IMMUTABLE PARALLEL SAFE STRICT COST 1
  86. RETURN trunc($1, 0);
  87. CREATE OR REPLACE FUNCTION numeric_pl_pg_lsn(numeric, pg_lsn)
  88. RETURNS pg_lsn
  89. LANGUAGE sql
  90. IMMUTABLE PARALLEL SAFE STRICT COST 1
  91. RETURN $2 + $1;
  92. CREATE OR REPLACE FUNCTION path_contain_pt(path, point)
  93. RETURNS boolean
  94. LANGUAGE sql
  95. IMMUTABLE PARALLEL SAFE STRICT COST 1
  96. RETURN on_ppath($2, $1);
  97. CREATE OR REPLACE FUNCTION polygon(circle)
  98. RETURNS polygon
  99. LANGUAGE sql
  100. IMMUTABLE PARALLEL SAFE STRICT COST 1
  101. RETURN polygon(12, $1);
  102. CREATE OR REPLACE FUNCTION age(timestamptz)
  103. RETURNS interval
  104. LANGUAGE sql
  105. STABLE PARALLEL SAFE STRICT COST 1
  106. RETURN age(cast(current_date as timestamptz), $1);
  107. CREATE OR REPLACE FUNCTION age(timestamp)
  108. RETURNS interval
  109. LANGUAGE sql
  110. STABLE PARALLEL SAFE STRICT COST 1
  111. RETURN age(cast(current_date as timestamp), $1);
  112. CREATE OR REPLACE FUNCTION date_part(text, date)
  113. RETURNS double precision
  114. LANGUAGE sql
  115. IMMUTABLE PARALLEL SAFE STRICT COST 1
  116. RETURN date_part($1, cast($2 as timestamp));
  117. CREATE OR REPLACE FUNCTION timestamptz(date, time)
  118. RETURNS timestamptz
  119. LANGUAGE sql
  120. STABLE PARALLEL SAFE STRICT COST 1
  121. RETURN cast(($1 + $2) as timestamptz);
  122. CREATE OR REPLACE FUNCTION timedate_pl(time, date)
  123. RETURNS timestamp
  124. LANGUAGE sql
  125. IMMUTABLE PARALLEL SAFE STRICT COST 1
  126. RETURN $2 + $1;
  127. CREATE OR REPLACE FUNCTION timetzdate_pl(timetz, date)
  128. RETURNS timestamptz
  129. LANGUAGE sql
  130. IMMUTABLE PARALLEL SAFE STRICT COST 1
  131. RETURN $2 + $1;
  132. CREATE OR REPLACE FUNCTION interval_pl_time(interval, time)
  133. RETURNS time
  134. LANGUAGE sql
  135. IMMUTABLE PARALLEL SAFE STRICT COST 1
  136. RETURN $2 + $1;
  137. CREATE OR REPLACE FUNCTION interval_pl_date(interval, date)
  138. RETURNS timestamp
  139. LANGUAGE sql
  140. IMMUTABLE PARALLEL SAFE STRICT COST 1
  141. RETURN $2 + $1;
  142. CREATE OR REPLACE FUNCTION interval_pl_timetz(interval, timetz)
  143. RETURNS timetz
  144. LANGUAGE sql
  145. IMMUTABLE PARALLEL SAFE STRICT COST 1
  146. RETURN $2 + $1;
  147. CREATE OR REPLACE FUNCTION interval_pl_timestamp(interval, timestamp)
  148. RETURNS timestamp
  149. LANGUAGE sql
  150. IMMUTABLE PARALLEL SAFE STRICT COST 1
  151. RETURN $2 + $1;
  152. CREATE OR REPLACE FUNCTION interval_pl_timestamptz(interval, timestamptz)
  153. RETURNS timestamptz
  154. LANGUAGE sql
  155. STABLE PARALLEL SAFE STRICT COST 1
  156. RETURN $2 + $1;
  157. CREATE OR REPLACE FUNCTION integer_pl_date(integer, date)
  158. RETURNS date
  159. LANGUAGE sql
  160. IMMUTABLE PARALLEL SAFE STRICT COST 1
  161. RETURN $2 + $1;
  162. CREATE OR REPLACE FUNCTION "overlaps"(timestamptz, timestamptz,
  163. timestamptz, interval)
  164. RETURNS boolean
  165. LANGUAGE sql
  166. STABLE PARALLEL SAFE COST 1
  167. RETURN ($1, $2) overlaps ($3, ($3 + $4));
  168. CREATE OR REPLACE FUNCTION "overlaps"(timestamptz, interval,
  169. timestamptz, interval)
  170. RETURNS boolean
  171. LANGUAGE sql
  172. STABLE PARALLEL SAFE COST 1
  173. RETURN ($1, ($1 + $2)) overlaps ($3, ($3 + $4));
  174. CREATE OR REPLACE FUNCTION "overlaps"(timestamptz, interval,
  175. timestamptz, timestamptz)
  176. RETURNS boolean
  177. LANGUAGE sql
  178. STABLE PARALLEL SAFE COST 1
  179. RETURN ($1, ($1 + $2)) overlaps ($3, $4);
  180. CREATE OR REPLACE FUNCTION "overlaps"(timestamp, timestamp,
  181. timestamp, interval)
  182. RETURNS boolean
  183. LANGUAGE sql
  184. IMMUTABLE PARALLEL SAFE COST 1
  185. RETURN ($1, $2) overlaps ($3, ($3 + $4));
  186. CREATE OR REPLACE FUNCTION "overlaps"(timestamp, interval,
  187. timestamp, timestamp)
  188. RETURNS boolean
  189. LANGUAGE sql
  190. IMMUTABLE PARALLEL SAFE COST 1
  191. RETURN ($1, ($1 + $2)) overlaps ($3, $4);
  192. CREATE OR REPLACE FUNCTION "overlaps"(timestamp, interval,
  193. timestamp, interval)
  194. RETURNS boolean
  195. LANGUAGE sql
  196. IMMUTABLE PARALLEL SAFE COST 1
  197. RETURN ($1, ($1 + $2)) overlaps ($3, ($3 + $4));
  198. CREATE OR REPLACE FUNCTION "overlaps"(time, interval,
  199. time, interval)
  200. RETURNS boolean
  201. LANGUAGE sql
  202. IMMUTABLE PARALLEL SAFE COST 1
  203. RETURN ($1, ($1 + $2)) overlaps ($3, ($3 + $4));
  204. CREATE OR REPLACE FUNCTION "overlaps"(time, time,
  205. time, interval)
  206. RETURNS boolean
  207. LANGUAGE sql
  208. IMMUTABLE PARALLEL SAFE COST 1
  209. RETURN ($1, $2) overlaps ($3, ($3 + $4));
  210. CREATE OR REPLACE FUNCTION "overlaps"(time, interval,
  211. time, time)
  212. RETURNS boolean
  213. LANGUAGE sql
  214. IMMUTABLE PARALLEL SAFE COST 1
  215. RETURN ($1, ($1 + $2)) overlaps ($3, $4);
  216. CREATE OR REPLACE FUNCTION int8pl_inet(bigint, inet)
  217. RETURNS inet
  218. LANGUAGE sql
  219. IMMUTABLE PARALLEL SAFE STRICT COST 1
  220. RETURN $2 + $1;
  221. CREATE OR REPLACE FUNCTION xpath(text, xml)
  222. RETURNS xml[]
  223. LANGUAGE sql
  224. IMMUTABLE PARALLEL SAFE STRICT COST 1
  225. RETURN xpath($1, $2, '{}'::text[]);
  226. CREATE OR REPLACE FUNCTION xpath_exists(text, xml)
  227. RETURNS boolean
  228. LANGUAGE sql
  229. IMMUTABLE PARALLEL SAFE STRICT COST 1
  230. RETURN xpath_exists($1, $2, '{}'::text[]);
  231. CREATE OR REPLACE FUNCTION pg_sleep_for(interval)
  232. RETURNS void
  233. LANGUAGE sql
  234. PARALLEL SAFE STRICT COST 1
  235. RETURN pg_sleep(extract(epoch from clock_timestamp() + $1) -
  236. extract(epoch from clock_timestamp()));
  237. CREATE OR REPLACE FUNCTION pg_sleep_until(timestamptz)
  238. RETURNS void
  239. LANGUAGE sql
  240. PARALLEL SAFE STRICT COST 1
  241. RETURN pg_sleep(extract(epoch from $1) -
  242. extract(epoch from clock_timestamp()));
  243. CREATE OR REPLACE FUNCTION pg_relation_size(regclass)
  244. RETURNS bigint
  245. LANGUAGE sql
  246. PARALLEL SAFE STRICT COST 1
  247. RETURN pg_relation_size($1, 'main');
  248. CREATE OR REPLACE FUNCTION obj_description(oid, name)
  249. RETURNS text
  250. LANGUAGE sql
  251. STABLE PARALLEL SAFE STRICT
  252. BEGIN ATOMIC
  253. select description from pg_description
  254. where objoid = $1 and
  255. classoid = (select oid from pg_class where relname = $2 and
  256. relnamespace = 'pg_catalog'::regnamespace) and
  257. objsubid = 0;
  258. END;
  259. CREATE OR REPLACE FUNCTION shobj_description(oid, name)
  260. RETURNS text
  261. LANGUAGE sql
  262. STABLE PARALLEL SAFE STRICT
  263. BEGIN ATOMIC
  264. select description from pg_shdescription
  265. where objoid = $1 and
  266. classoid = (select oid from pg_class where relname = $2 and
  267. relnamespace = 'pg_catalog'::regnamespace);
  268. END;
  269. CREATE OR REPLACE FUNCTION obj_description(oid)
  270. RETURNS text
  271. LANGUAGE sql
  272. STABLE PARALLEL SAFE STRICT
  273. BEGIN ATOMIC
  274. select description from pg_description where objoid = $1 and objsubid = 0;
  275. END;
  276. CREATE OR REPLACE FUNCTION col_description(oid, integer)
  277. RETURNS text
  278. LANGUAGE sql
  279. STABLE PARALLEL SAFE STRICT
  280. BEGIN ATOMIC
  281. select description from pg_description
  282. where objoid = $1 and classoid = 'pg_class'::regclass and objsubid = $2;
  283. END;
  284. CREATE OR REPLACE FUNCTION ts_debug(config regconfig, document text,
  285. OUT alias text,
  286. OUT description text,
  287. OUT token text,
  288. OUT dictionaries regdictionary[],
  289. OUT dictionary regdictionary,
  290. OUT lexemes text[])
  291. RETURNS SETOF record
  292. LANGUAGE sql
  293. STABLE PARALLEL SAFE STRICT
  294. BEGIN ATOMIC
  295. select
  296. tt.alias AS alias,
  297. tt.description AS description,
  298. parse.token AS token,
  299. ARRAY ( SELECT m.mapdict::regdictionary
  300. FROM pg_ts_config_map AS m
  301. WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid
  302. ORDER BY m.mapseqno )
  303. AS dictionaries,
  304. ( SELECT mapdict::regdictionary
  305. FROM pg_ts_config_map AS m
  306. WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid
  307. ORDER BY ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno
  308. LIMIT 1
  309. ) AS dictionary,
  310. ( SELECT ts_lexize(mapdict, parse.token)
  311. FROM pg_ts_config_map AS m
  312. WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid
  313. ORDER BY ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno
  314. LIMIT 1
  315. ) AS lexemes
  316. FROM ts_parse(
  317. (SELECT cfgparser FROM pg_ts_config WHERE oid = $1 ), $2
  318. ) AS parse,
  319. ts_token_type(
  320. (SELECT cfgparser FROM pg_ts_config WHERE oid = $1 )
  321. ) AS tt
  322. WHERE tt.tokid = parse.tokid;
  323. END;
  324. CREATE OR REPLACE FUNCTION ts_debug(document text,
  325. OUT alias text,
  326. OUT description text,
  327. OUT token text,
  328. OUT dictionaries regdictionary[],
  329. OUT dictionary regdictionary,
  330. OUT lexemes text[])
  331. RETURNS SETOF record
  332. LANGUAGE sql
  333. STABLE PARALLEL SAFE STRICT
  334. BEGIN ATOMIC
  335. SELECT * FROM ts_debug(get_current_ts_config(), $1);
  336. END;
  337. CREATE OR REPLACE FUNCTION
  338. pg_backup_start(label text, fast boolean DEFAULT false)
  339. RETURNS pg_lsn STRICT VOLATILE LANGUAGE internal AS 'pg_backup_start'
  340. PARALLEL RESTRICTED;
  341. CREATE OR REPLACE FUNCTION pg_backup_stop (
  342. wait_for_archive boolean DEFAULT true, OUT lsn pg_lsn,
  343. OUT labelfile text, OUT spcmapfile text)
  344. RETURNS record STRICT VOLATILE LANGUAGE internal as 'pg_backup_stop'
  345. PARALLEL RESTRICTED;
  346. CREATE OR REPLACE FUNCTION
  347. pg_promote(wait boolean DEFAULT true, wait_seconds integer DEFAULT 60)
  348. RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_promote'
  349. PARALLEL SAFE;
  350. CREATE OR REPLACE FUNCTION
  351. pg_terminate_backend(pid integer, timeout int8 DEFAULT 0)
  352. RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_terminate_backend'
  353. PARALLEL SAFE;
  354. -- legacy definition for compatibility with 9.3
  355. CREATE OR REPLACE FUNCTION
  356. json_populate_record(base anyelement, from_json json, use_json_as_text boolean DEFAULT false)
  357. RETURNS anyelement LANGUAGE internal STABLE AS 'json_populate_record' PARALLEL SAFE;
  358. -- legacy definition for compatibility with 9.3
  359. CREATE OR REPLACE FUNCTION
  360. json_populate_recordset(base anyelement, from_json json, use_json_as_text boolean DEFAULT false)
  361. RETURNS SETOF anyelement LANGUAGE internal STABLE ROWS 100 AS 'json_populate_recordset' PARALLEL SAFE;
  362. CREATE OR REPLACE FUNCTION pg_logical_slot_get_changes(
  363. IN slot_name name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}',
  364. OUT lsn pg_lsn, OUT xid xid, OUT data text)
  365. RETURNS SETOF RECORD
  366. LANGUAGE INTERNAL
  367. VOLATILE ROWS 1000 COST 1000
  368. AS 'pg_logical_slot_get_changes';
  369. CREATE OR REPLACE FUNCTION pg_logical_slot_peek_changes(
  370. IN slot_name name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}',
  371. OUT lsn pg_lsn, OUT xid xid, OUT data text)
  372. RETURNS SETOF RECORD
  373. LANGUAGE INTERNAL
  374. VOLATILE ROWS 1000 COST 1000
  375. AS 'pg_logical_slot_peek_changes';
  376. CREATE OR REPLACE FUNCTION pg_logical_slot_get_binary_changes(
  377. IN slot_name name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}',
  378. OUT lsn pg_lsn, OUT xid xid, OUT data bytea)
  379. RETURNS SETOF RECORD
  380. LANGUAGE INTERNAL
  381. VOLATILE ROWS 1000 COST 1000
  382. AS 'pg_logical_slot_get_binary_changes';
  383. CREATE OR REPLACE FUNCTION pg_logical_slot_peek_binary_changes(
  384. IN slot_name name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}',
  385. OUT lsn pg_lsn, OUT xid xid, OUT data bytea)
  386. RETURNS SETOF RECORD
  387. LANGUAGE INTERNAL
  388. VOLATILE ROWS 1000 COST 1000
  389. AS 'pg_logical_slot_peek_binary_changes';
  390. CREATE OR REPLACE FUNCTION pg_create_physical_replication_slot(
  391. IN slot_name name, IN immediately_reserve boolean DEFAULT false,
  392. IN temporary boolean DEFAULT false,
  393. OUT slot_name name, OUT lsn pg_lsn)
  394. RETURNS RECORD
  395. LANGUAGE INTERNAL
  396. STRICT VOLATILE
  397. AS 'pg_create_physical_replication_slot';
  398. CREATE OR REPLACE FUNCTION pg_create_logical_replication_slot(
  399. IN slot_name name, IN plugin name,
  400. IN temporary boolean DEFAULT false,
  401. IN twophase boolean DEFAULT false,
  402. OUT slot_name name, OUT lsn pg_lsn)
  403. RETURNS RECORD
  404. LANGUAGE INTERNAL
  405. STRICT VOLATILE
  406. AS 'pg_create_logical_replication_slot';
  407. CREATE OR REPLACE FUNCTION
  408. make_interval(years int4 DEFAULT 0, months int4 DEFAULT 0, weeks int4 DEFAULT 0,
  409. days int4 DEFAULT 0, hours int4 DEFAULT 0, mins int4 DEFAULT 0,
  410. secs double precision DEFAULT 0.0)
  411. RETURNS interval
  412. LANGUAGE INTERNAL
  413. STRICT IMMUTABLE PARALLEL SAFE
  414. AS 'make_interval';
  415. CREATE OR REPLACE FUNCTION
  416. jsonb_set(jsonb_in jsonb, path text[] , replacement jsonb,
  417. create_if_missing boolean DEFAULT true)
  418. RETURNS jsonb
  419. LANGUAGE INTERNAL
  420. STRICT IMMUTABLE PARALLEL SAFE
  421. AS 'jsonb_set';
  422. CREATE OR REPLACE FUNCTION
  423. jsonb_set_lax(jsonb_in jsonb, path text[] , replacement jsonb,
  424. create_if_missing boolean DEFAULT true,
  425. null_value_treatment text DEFAULT 'use_json_null')
  426. RETURNS jsonb
  427. LANGUAGE INTERNAL
  428. CALLED ON NULL INPUT IMMUTABLE PARALLEL SAFE
  429. AS 'jsonb_set_lax';
  430. CREATE OR REPLACE FUNCTION
  431. parse_ident(str text, strict boolean DEFAULT true)
  432. RETURNS text[]
  433. LANGUAGE INTERNAL
  434. STRICT IMMUTABLE PARALLEL SAFE
  435. AS 'parse_ident';
  436. CREATE OR REPLACE FUNCTION
  437. jsonb_insert(jsonb_in jsonb, path text[] , replacement jsonb,
  438. insert_after boolean DEFAULT false)
  439. RETURNS jsonb
  440. LANGUAGE INTERNAL
  441. STRICT IMMUTABLE PARALLEL SAFE
  442. AS 'jsonb_insert';
  443. CREATE OR REPLACE FUNCTION
  444. jsonb_path_exists(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',
  445. silent boolean DEFAULT false)
  446. RETURNS boolean
  447. LANGUAGE INTERNAL
  448. STRICT IMMUTABLE PARALLEL SAFE
  449. AS 'jsonb_path_exists';
  450. CREATE OR REPLACE FUNCTION
  451. jsonb_path_match(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',
  452. silent boolean DEFAULT false)
  453. RETURNS boolean
  454. LANGUAGE INTERNAL
  455. STRICT IMMUTABLE PARALLEL SAFE
  456. AS 'jsonb_path_match';
  457. CREATE OR REPLACE FUNCTION
  458. jsonb_path_query(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',
  459. silent boolean DEFAULT false)
  460. RETURNS SETOF jsonb
  461. LANGUAGE INTERNAL
  462. STRICT IMMUTABLE PARALLEL SAFE
  463. AS 'jsonb_path_query';
  464. CREATE OR REPLACE FUNCTION
  465. jsonb_path_query_array(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',
  466. silent boolean DEFAULT false)
  467. RETURNS jsonb
  468. LANGUAGE INTERNAL
  469. STRICT IMMUTABLE PARALLEL SAFE
  470. AS 'jsonb_path_query_array';
  471. CREATE OR REPLACE FUNCTION
  472. jsonb_path_query_first(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',
  473. silent boolean DEFAULT false)
  474. RETURNS jsonb
  475. LANGUAGE INTERNAL
  476. STRICT IMMUTABLE PARALLEL SAFE
  477. AS 'jsonb_path_query_first';
  478. CREATE OR REPLACE FUNCTION
  479. jsonb_path_exists_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',
  480. silent boolean DEFAULT false)
  481. RETURNS boolean
  482. LANGUAGE INTERNAL
  483. STRICT STABLE PARALLEL SAFE
  484. AS 'jsonb_path_exists_tz';
  485. CREATE OR REPLACE FUNCTION
  486. jsonb_path_match_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',
  487. silent boolean DEFAULT false)
  488. RETURNS boolean
  489. LANGUAGE INTERNAL
  490. STRICT STABLE PARALLEL SAFE
  491. AS 'jsonb_path_match_tz';
  492. CREATE OR REPLACE FUNCTION
  493. jsonb_path_query_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',
  494. silent boolean DEFAULT false)
  495. RETURNS SETOF jsonb
  496. LANGUAGE INTERNAL
  497. STRICT STABLE PARALLEL SAFE
  498. AS 'jsonb_path_query_tz';
  499. CREATE OR REPLACE FUNCTION
  500. jsonb_path_query_array_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',
  501. silent boolean DEFAULT false)
  502. RETURNS jsonb
  503. LANGUAGE INTERNAL
  504. STRICT STABLE PARALLEL SAFE
  505. AS 'jsonb_path_query_array_tz';
  506. CREATE OR REPLACE FUNCTION
  507. jsonb_path_query_first_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}',
  508. silent boolean DEFAULT false)
  509. RETURNS jsonb
  510. LANGUAGE INTERNAL
  511. STRICT STABLE PARALLEL SAFE
  512. AS 'jsonb_path_query_first_tz';
  513. -- default normalization form is NFC, per SQL standard
  514. CREATE OR REPLACE FUNCTION
  515. "normalize"(text, text DEFAULT 'NFC')
  516. RETURNS text
  517. LANGUAGE internal
  518. STRICT IMMUTABLE PARALLEL SAFE
  519. AS 'unicode_normalize_func';
  520. CREATE OR REPLACE FUNCTION
  521. is_normalized(text, text DEFAULT 'NFC')
  522. RETURNS boolean
  523. LANGUAGE internal
  524. STRICT IMMUTABLE PARALLEL SAFE
  525. AS 'unicode_is_normalized';
  526. --
  527. -- The default permissions for functions mean that anyone can execute them.
  528. -- A number of functions shouldn't be executable by just anyone, but rather
  529. -- than use explicit 'superuser()' checks in those functions, we use the GRANT
  530. -- system to REVOKE access to those functions at initdb time. Administrators
  531. -- can later change who can access these functions, or leave them as only
  532. -- available to superuser / cluster owner, if they choose.
  533. --
  534. REVOKE EXECUTE ON FUNCTION pg_backup_start(text, boolean) FROM public;
  535. REVOKE EXECUTE ON FUNCTION pg_backup_stop(boolean) FROM public;
  536. REVOKE EXECUTE ON FUNCTION pg_create_restore_point(text) FROM public;
  537. REVOKE EXECUTE ON FUNCTION pg_switch_wal() FROM public;
  538. REVOKE EXECUTE ON FUNCTION pg_log_standby_snapshot() FROM public;
  539. REVOKE EXECUTE ON FUNCTION pg_wal_replay_pause() FROM public;
  540. REVOKE EXECUTE ON FUNCTION pg_wal_replay_resume() FROM public;
  541. REVOKE EXECUTE ON FUNCTION pg_rotate_logfile() FROM public;
  542. REVOKE EXECUTE ON FUNCTION pg_reload_conf() FROM public;
  543. REVOKE EXECUTE ON FUNCTION pg_current_logfile() FROM public;
  544. REVOKE EXECUTE ON FUNCTION pg_current_logfile(text) FROM public;
  545. REVOKE EXECUTE ON FUNCTION pg_promote(boolean, integer) FROM public;
  546. REVOKE EXECUTE ON FUNCTION pg_stat_reset() FROM public;
  547. REVOKE EXECUTE ON FUNCTION pg_stat_reset_shared(text) FROM public;
  548. REVOKE EXECUTE ON FUNCTION pg_stat_reset_slru(text) FROM public;
  549. REVOKE EXECUTE ON FUNCTION pg_stat_reset_single_table_counters(oid) FROM public;
  550. REVOKE EXECUTE ON FUNCTION pg_stat_reset_single_function_counters(oid) FROM public;
  551. REVOKE EXECUTE ON FUNCTION pg_stat_reset_replication_slot(text) FROM public;
  552. REVOKE EXECUTE ON FUNCTION pg_stat_have_stats(text, oid, oid) FROM public;
  553. REVOKE EXECUTE ON FUNCTION pg_stat_reset_subscription_stats(oid) FROM public;
  554. REVOKE EXECUTE ON FUNCTION lo_import(text) FROM public;
  555. REVOKE EXECUTE ON FUNCTION lo_import(text, oid) FROM public;
  556. REVOKE EXECUTE ON FUNCTION lo_export(oid, text) FROM public;
  557. REVOKE EXECUTE ON FUNCTION pg_ls_logdir() FROM public;
  558. REVOKE EXECUTE ON FUNCTION pg_ls_waldir() FROM public;
  559. REVOKE EXECUTE ON FUNCTION pg_ls_archive_statusdir() FROM public;
  560. REVOKE EXECUTE ON FUNCTION pg_ls_tmpdir() FROM public;
  561. REVOKE EXECUTE ON FUNCTION pg_ls_tmpdir(oid) FROM public;
  562. REVOKE EXECUTE ON FUNCTION pg_read_file(text) FROM public;
  563. REVOKE EXECUTE ON FUNCTION pg_read_file(text,boolean) FROM public;
  564. REVOKE EXECUTE ON FUNCTION pg_read_file(text,bigint,bigint) FROM public;
  565. REVOKE EXECUTE ON FUNCTION pg_read_file(text,bigint,bigint,boolean) FROM public;
  566. REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text) FROM public;
  567. REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text,boolean) FROM public;
  568. REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text,bigint,bigint) FROM public;
  569. REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text,bigint,bigint,boolean) FROM public;
  570. REVOKE EXECUTE ON FUNCTION pg_replication_origin_advance(text, pg_lsn) FROM public;
  571. REVOKE EXECUTE ON FUNCTION pg_replication_origin_create(text) FROM public;
  572. REVOKE EXECUTE ON FUNCTION pg_replication_origin_drop(text) FROM public;
  573. REVOKE EXECUTE ON FUNCTION pg_replication_origin_oid(text) FROM public;
  574. REVOKE EXECUTE ON FUNCTION pg_replication_origin_progress(text, boolean) FROM public;
  575. REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_is_setup() FROM public;
  576. REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_progress(boolean) FROM public;
  577. REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_reset() FROM public;
  578. REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_setup(text) FROM public;
  579. REVOKE EXECUTE ON FUNCTION pg_replication_origin_xact_reset() FROM public;
  580. REVOKE EXECUTE ON FUNCTION pg_replication_origin_xact_setup(pg_lsn, timestamp with time zone) FROM public;
  581. REVOKE EXECUTE ON FUNCTION pg_show_replication_origin_status() FROM public;
  582. REVOKE EXECUTE ON FUNCTION pg_stat_file(text) FROM public;
  583. REVOKE EXECUTE ON FUNCTION pg_stat_file(text,boolean) FROM public;
  584. REVOKE EXECUTE ON FUNCTION pg_ls_dir(text) FROM public;
  585. REVOKE EXECUTE ON FUNCTION pg_ls_dir(text,boolean,boolean) FROM public;
  586. REVOKE EXECUTE ON FUNCTION pg_log_backend_memory_contexts(integer) FROM PUBLIC;
  587. REVOKE EXECUTE ON FUNCTION pg_ls_logicalsnapdir() FROM PUBLIC;
  588. REVOKE EXECUTE ON FUNCTION pg_ls_logicalmapdir() FROM PUBLIC;
  589. REVOKE EXECUTE ON FUNCTION pg_ls_replslotdir(text) FROM PUBLIC;
  590. --
  591. -- We also set up some things as accessible to standard roles.
  592. --
  593. GRANT EXECUTE ON FUNCTION pg_ls_logdir() TO pg_monitor;
  594. GRANT EXECUTE ON FUNCTION pg_ls_waldir() TO pg_monitor;
  595. GRANT EXECUTE ON FUNCTION pg_ls_archive_statusdir() TO pg_monitor;
  596. GRANT EXECUTE ON FUNCTION pg_ls_tmpdir() TO pg_monitor;
  597. GRANT EXECUTE ON FUNCTION pg_ls_tmpdir(oid) TO pg_monitor;
  598. GRANT EXECUTE ON FUNCTION pg_ls_logicalsnapdir() TO pg_monitor;
  599. GRANT EXECUTE ON FUNCTION pg_ls_logicalmapdir() TO pg_monitor;
  600. GRANT EXECUTE ON FUNCTION pg_ls_replslotdir(text) TO pg_monitor;
  601. GRANT pg_read_all_settings TO pg_monitor;
  602. GRANT pg_read_all_stats TO pg_monitor;
  603. GRANT pg_stat_scan_tables TO pg_monitor;