mirror of https://github.com/postgres/postgres
These functions have been marked parallel safe, but the buildfarm's
response to commit e2933a6e1
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
pull/109/head
parent
51b5834cd5
commit
aeaaf520f4
@ -0,0 +1,28 @@ |
|||||||
|
/* contrib/pageinspect/pageinspect--1.10--1.11.sql */ |
||||||
|
|
||||||
|
-- complain if script is sourced in psql, rather than via ALTER EXTENSION |
||||||
|
\echo Use "ALTER EXTENSION pageinspect UPDATE TO '1.11'" to load this file. \quit |
||||||
|
|
||||||
|
-- |
||||||
|
-- Functions that fetch relation pages must be PARALLEL RESTRICTED, |
||||||
|
-- not PARALLEL SAFE, otherwise they will fail when run on a |
||||||
|
-- temporary table in a parallel worker process. |
||||||
|
-- |
||||||
|
|
||||||
|
ALTER FUNCTION get_raw_page(text, int8) PARALLEL RESTRICTED; |
||||||
|
ALTER FUNCTION get_raw_page(text, text, int8) PARALLEL RESTRICTED; |
||||||
|
-- tuple_data_split must be restricted because it may fetch TOAST data. |
||||||
|
ALTER FUNCTION tuple_data_split(oid, bytea, integer, integer, text) PARALLEL RESTRICTED; |
||||||
|
ALTER FUNCTION tuple_data_split(oid, bytea, integer, integer, text, bool) PARALLEL RESTRICTED; |
||||||
|
-- heap_page_item_attrs must be restricted because it calls tuple_data_split. |
||||||
|
ALTER FUNCTION heap_page_item_attrs(bytea, regclass, bool) PARALLEL RESTRICTED; |
||||||
|
ALTER FUNCTION heap_page_item_attrs(bytea, regclass) PARALLEL RESTRICTED; |
||||||
|
ALTER FUNCTION bt_metap(text) PARALLEL RESTRICTED; |
||||||
|
ALTER FUNCTION bt_page_stats(text, int8) PARALLEL RESTRICTED; |
||||||
|
ALTER FUNCTION bt_page_items(text, int8) PARALLEL RESTRICTED; |
||||||
|
ALTER FUNCTION hash_bitmap_info(regclass, int8) PARALLEL RESTRICTED; |
||||||
|
-- brin_page_items might be parallel safe, because it seems to touch |
||||||
|
-- only index metadata, but I don't think there's a point in risking it. |
||||||
|
-- Likewise for gist_page_items. |
||||||
|
ALTER FUNCTION brin_page_items(bytea, regclass) PARALLEL RESTRICTED; |
||||||
|
ALTER FUNCTION gist_page_items(bytea, regclass) PARALLEL RESTRICTED; |
@ -1,5 +1,5 @@ |
|||||||
# pageinspect extension |
# pageinspect extension |
||||||
comment = 'inspect the contents of database pages at a low level' |
comment = 'inspect the contents of database pages at a low level' |
||||||
default_version = '1.10' |
default_version = '1.11' |
||||||
module_pathname = '$libdir/pageinspect' |
module_pathname = '$libdir/pageinspect' |
||||||
relocatable = true |
relocatable = true |
||||||
|
Loading…
Reference in new issue