Skip to content

Commit aeaaf52

Browse files
committed
Mark pageinspect's disk-accessing functions as parallel restricted.
These functions have been marked parallel safe, but the buildfarm's response to commit e2933a6 exposed the flaw in that thinking: if you try to use them on a temporary table, and they run inside a parallel worker, they'll fail with "cannot access temporary tables during a parallel operation". Fix that by marking them parallel restricted instead. Maybe someday we'll have a better answer and can reverse this decision. Back-patch to v15. To go back further, we'd have to devise variant versions of pre-1.10 pageinspect versions. Given the lack of field complaints, it doesn't seem worth the trouble. We'll just deem this case unsupported pre-v15. (If anyone does complain, it might be good enough to update the markings manually in their DBs.) Discussion: https://postgr.es/m/E1ox94a-000EHu-VH@gemulon.postgresql.org
1 parent 51b5834 commit aeaaf52

File tree

4 files changed

+32
-2
lines changed

4 files changed

+32
-2
lines changed

contrib/pageinspect/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ OBJS = \
1313
rawpage.o
1414

1515
EXTENSION = pageinspect
16-
DATA = pageinspect--1.9--1.10.sql pageinspect--1.8--1.9.sql \
16+
DATA = pageinspect--1.10--1.11.sql \
17+
pageinspect--1.9--1.10.sql pageinspect--1.8--1.9.sql \
1718
pageinspect--1.7--1.8.sql pageinspect--1.6--1.7.sql \
1819
pageinspect--1.5.sql pageinspect--1.5--1.6.sql \
1920
pageinspect--1.4--1.5.sql pageinspect--1.3--1.4.sql \

contrib/pageinspect/meson.build

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ install_data(
3333
'pageinspect--1.7--1.8.sql',
3434
'pageinspect--1.8--1.9.sql',
3535
'pageinspect--1.9--1.10.sql',
36+
'pageinspect--1.10--1.11.sql',
3637
'pageinspect.control',
3738
kwargs: contrib_data_args,
3839
)
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/* contrib/pageinspect/pageinspect--1.10--1.11.sql */
2+
3+
-- complain if script is sourced in psql, rather than via ALTER EXTENSION
4+
\echo Use "ALTER EXTENSION pageinspect UPDATE TO '1.11'" to load this file. \quit
5+
6+
--
7+
-- Functions that fetch relation pages must be PARALLEL RESTRICTED,
8+
-- not PARALLEL SAFE, otherwise they will fail when run on a
9+
-- temporary table in a parallel worker process.
10+
--
11+
12+
ALTER FUNCTION get_raw_page(text, int8) PARALLEL RESTRICTED;
13+
ALTER FUNCTION get_raw_page(text, text, int8) PARALLEL RESTRICTED;
14+
-- tuple_data_split must be restricted because it may fetch TOAST data.
15+
ALTER FUNCTION tuple_data_split(oid, bytea, integer, integer, text) PARALLEL RESTRICTED;
16+
ALTER FUNCTION tuple_data_split(oid, bytea, integer, integer, text, bool) PARALLEL RESTRICTED;
17+
-- heap_page_item_attrs must be restricted because it calls tuple_data_split.
18+
ALTER FUNCTION heap_page_item_attrs(bytea, regclass, bool) PARALLEL RESTRICTED;
19+
ALTER FUNCTION heap_page_item_attrs(bytea, regclass) PARALLEL RESTRICTED;
20+
ALTER FUNCTION bt_metap(text) PARALLEL RESTRICTED;
21+
ALTER FUNCTION bt_page_stats(text, int8) PARALLEL RESTRICTED;
22+
ALTER FUNCTION bt_page_items(text, int8) PARALLEL RESTRICTED;
23+
ALTER FUNCTION hash_bitmap_info(regclass, int8) PARALLEL RESTRICTED;
24+
-- brin_page_items might be parallel safe, because it seems to touch
25+
-- only index metadata, but I don't think there's a point in risking it.
26+
-- Likewise for gist_page_items.
27+
ALTER FUNCTION brin_page_items(bytea, regclass) PARALLEL RESTRICTED;
28+
ALTER FUNCTION gist_page_items(bytea, regclass) PARALLEL RESTRICTED;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# pageinspect extension
22
comment = 'inspect the contents of database pages at a low level'
3-
default_version = '1.10'
3+
default_version = '1.11'
44
module_pathname = '$libdir/pageinspect'
55
relocatable = true

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy