pg.ddx.io  pgsql-hackers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Masahiro Ikeda <ikedamsh@oss.nttdata.com>
To: Richard Guo <guofenglinux@gmail.com>
Cc: Dilip Kumar <dilipbalaut@gmail.com>
Cc: Fujii Masao <masao.fujii@oss.nttdata.com>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Subject: Re: Assertion failure in smgr.c when using pg_prewarm with partitioned tables
Date: Fri, 16 May 2025 15:21:11 +0900
Message-ID: <8829854bbfc8635ddecd0846bb72dfda@oss.nttdata.com> (raw)
In-Reply-To: <CAMbWs49T8hFr571c+b0T4GiDwKow5B1HUMMxav7qhUt75WHpKA@mail.gmail.com>
References: <e082e6027610fd0a4091ae6d033aa117@oss.nttdata.com>
	<CAFiTN-tKxhMG0QNO1V3VNsfnhtkS=hrOJNj5Kxs6cGKtujdyhg@mail.gmail.com>
	<7fde0acf-2395-44d8-b081-bfa0e10097dc@oss.nttdata.com>
	<CAFiTN-vDKGHn76XkL2oTQVf5aCScKqs1GKf_aALGO5u7fuqNwg@mail.gmail.com>
	<CAMbWs49T8hFr571c+b0T4GiDwKow5B1HUMMxav7qhUt75WHpKA@mail.gmail.com>

Thank you for your comments!

I updated the patch to use RELKIND_HAS_STORAGE() as done in
commit 4623d7144. Please see the v2-0001 patch for the changes.

On 2025-05-15 19:57, Richard Guo wrote:
> +1.  FWIW, not long ago we fixed a similar Assert failure in
> contrib/pg_freespacemap by verifying RELKIND_HAS_STORAGE() before
> trying to access the storage (see 4623d7144).  Wondering if there are
> other similar issues elsewhere in contrib ...

I tested all contrib functions that take regclass arguments (see
attached test.sql and test_result.txt). The result shows that only
pg_prewarm() can lead to the assertion failure.


However, I found that amcheck's error messages can be misleading
when run on partitioned indexes.

For example, on the master branch, amcheck (e.g., bt_index_check 
function)
shows this error:

  > ERROR:  expected "btree" index as targets for verification
  > DETAIL:  Relation "pgbench_accounts_pkey" is a btree index.

This message says it expects a "btree" index, yet also states the 
relation
is a "btree" index, which can seem contradictory. The actual issue is 
that
the index is a btree partitioned index, but this detail is missing, 
causing
possible confusion.

Therefore, I thought it would be better to update the detailed message
as shown in the v2-0002 patch:

* master with 0002 patch
  > ERROR:  expected "btree" index as targets for verification
  > DETAIL:  Relation "pgbench_accounts_pkey" is a btree partitioned 
index.


Regards,
-- 
Masahiro Ikeda
NTT DATA CORPORATION

Attachments: download all (4 files, .tar.gz)

test.sql (text/plain, 7.2K) download -- 1. prepare -- pgbench -i -s --partition=3 -- 2. check functions which has regclass arguments -- prewarm CREATE EXTENSION IF NOT EXISTS pg_prewarm; SELECT pg_prewarm('pgbench_accounts'); SELECT pg_prewarm('pgbench_accounts_1'); SELECT pg_prewarm('pgbench_accounts_pkey'); SELECT pg_prewarm('pgbench_accounts_1_pkey'); -- amcheck CREATE EXTENSION IF NOT EXISTS amcheck; SELECT bt_index_check('pgbench_accounts'::regclass, true, true); SELECT bt_index_check('pgbench_accounts_1'::regclass, true, true); SELECT bt_index_check('pgbench_accounts_pkey'::regclass, true, true); SELECT bt_index_check('pgbench_accounts_1_pkey'::regclass, true, true); SELECT bt_index_parent_check('pgbench_accounts'::regclass, true, true); SELECT bt_index_parent_check('pgbench_accounts_1'::regclass, true, true); SELECT bt_index_parent_check('pgbench_accounts_pkey'::regclass, true, true); SELECT bt_index_parent_check('pgbench_accounts_1_pkey'::regclass, true, true); SELECT gin_index_check('pgbench_accounts'::regclass); SELECT gin_index_check('pgbench_accounts_1'::regclass); SELECT gin_index_check('pgbench_accounts_pkey'::regclass); SELECT gin_index_check('pgbench_accounts_1_pkey'::regclass); SELECT verify_heapam('pgbench_accounts'::regclass); SELECT verify_heapam('pgbench_accounts_1'::regclass); SELECT verify_heapam('pgbench_accounts_pkey'::regclass); SELECT verify_heapam('pgbench_accounts_1_pkey'::regclass); -- brin SELECT brin_summarize_new_values('pgbench_accounts'::regclass); SELECT brin_summarize_new_values('pgbench_accounts_1'::regclass); SELECT brin_summarize_new_values('pgbench_accounts_pkey'::regclass); SELECT brin_summarize_new_values('pgbench_accounts_1_pkey'::regclass); SELECT brin_summarize_range('pgbench_accounts'::regclass, 1); SELECT brin_summarize_range('pgbench_accounts_1'::regclass, 1); SELECT brin_summarize_range('pgbench_accounts_pkey'::regclass, 1); SELECT brin_summarize_range('pgbench_accounts_1_pkey'::regclass, 1); SELECT brin_desummarize_range('pgbench_accounts'::regclass, 1); SELECT brin_desummarize_range('pgbench_accounts_1'::regclass, 1); SELECT brin_desummarize_range('pgbench_accounts_pkey'::regclass, 1); SELECT brin_desummarize_range('pgbench_accounts_1_pkey'::regclass, 1); -- pageinspect CREATE EXTENSION IF NOT EXISTS pageinspect; SELECT tuple_data_split( 'pgbench_accounts'::regclass, t_data, t_infomask, t_infomask2, t_bits ) FROM heap_page_items(get_raw_page('pgbench_accounts_1', 2)) LIMIT 1; SELECT tuple_data_split( 'pgbench_accounts_1'::regclass, t_data, t_infomask, t_infomask2, t_bits ) FROM heap_page_items(get_raw_page('pgbench_accounts_1', 2)) LIMIT 1; SELECT tuple_data_split( 'pgbench_accounts_pkey'::regclass, t_data, t_infomask, t_infomask2, t_bits ) FROM heap_page_items(get_raw_page('pgbench_accounts_1', 2)) LIMIT 1; SELECT tuple_data_split( 'pgbench_accounts_1_pkey'::regclass, t_data, t_infomask, t_infomask2, t_bits ) FROM heap_page_items(get_raw_page('pgbench_accounts_1', 2)) LIMIT 1; SELECT * FROM heap_page_item_attrs( get_raw_page('pgbench_accounts', 0), 'pgbench_accounts'::regclass ) LIMIT 1; SELECT * FROM heap_page_item_attrs( get_raw_page('pgbench_accounts_1', 0), 'pgbench_accounts_1'::regclass ) LIMIT 1; SELECT * FROM heap_page_item_attrs( get_raw_page('pgbench_accounts_pkey', 0), 'pgbench_accounts_pkey'::regclass ) LIMIT 1; SELECT * FROM heap_page_item_attrs( get_raw_page('pgbench_accounts_1_pkey', 0), 'pgbench_accounts_1_pkey'::regclass ) LIMIT 1; SELECT * FROM gist_page_items( get_raw_page('pgbench_accounts', 1), 'pgbench_accounts'::regclass ); SELECT * FROM gist_page_items( get_raw_page('pgbench_accounts_1', 1), 'pgbench_accounts_1'::regclass ); SELECT * FROM gist_page_items( get_raw_page('pgbench_accounts_pkey', 1), 'pgbench_accounts_pkey'::regclass ); SELECT * FROM gist_page_items( get_raw_page('pgbench_accounts_1_pkey', 1), 'pgbench_accounts_1_pkey'::regclass ); -- pgstattuple CREATE EXTENSION IF NOT EXISTS pgstattuple; SELECT * FROM pgstattuple('pgbench_accounts'); SELECT * FROM pgstattuple('pgbench_accounts_1'); SELECT * FROM pgstattuple('pgbench_accounts_pkey'); SELECT * FROM pgstattuple('pgbench_accounts_1_pkey'); SELECT * FROM pgstatindex('pgbench_accounts_pkey'); SELECT * FROM pgstatindex('pgbench_accounts_1_pkey'); SELECT * FROM pgstatindex('pgbench_accounts'); SELECT * FROM pgstatindex('pgbench_accounts_1'); SELECT * FROM pgstatginindex('pgbench_accounts_pkey'); SELECT * FROM pgstatginindex('pgbench_accounts_1_pkey'); SELECT * FROM pgstatginindex('pgbench_accounts'); SELECT * FROM pgstatginindex('pgbench_accounts_1'); SELECT * FROM pgstathashindex('pgbench_accounts_pkey'); SELECT * FROM pgstathashindex('pgbench_accounts_1_pkey'); SELECT * FROM pgstathashindex('pgbench_accounts'); SELECT * FROM pgstathashindex('pgbench_accounts_1'); SELECT pg_relpages('pgbench_accounts'); SELECT pg_relpages('pgbench_accounts_1'); SELECT pg_relpages('pgbench_accounts_pkey'); SELECT pg_relpages('pgbench_accounts_1_pkey'); SELECT * FROM pgstattuple_approx('pgbench_accounts'); SELECT * FROM pgstattuple_approx('pgbench_accounts_1'); SELECT * FROM pgstattuple_approx('pgbench_accounts_pkey'); SELECT * FROM pgstattuple_approx('pgbench_accounts_1_pkey'); -- pg_surgery CREATE EXTENSION IF NOT EXISTS pg_surgery; SELECT heap_force_kill('pgbench_accounts', ARRAY['(0, 1)']::tid[]); SELECT heap_force_kill('pgbench_accounts_1', ARRAY['(0, 1)']::tid[]); SELECT heap_force_kill('pgbench_accounts_pkey', ARRAY['(0, 1)']::tid[]); SELECT heap_force_kill('pgbench_accounts_1_pkey', ARRAY['(0, 1)']::tid[]); SELECT heap_force_freeze('pgbench_accounts', ARRAY['(0, 1)']::tid[]); SELECT heap_force_freeze('pgbench_accounts_1', ARRAY['(0, 1)']::tid[]); SELECT heap_force_freeze('pgbench_accounts_pkey', ARRAY['(0, 1)']::tid[]); SELECT heap_force_freeze('pgbench_accounts_1_pkey', ARRAY['(0, 1)']::tid[]); -- pg_visibility CREATE EXTENSION IF NOT EXISTS pg_visibility; SELECT * FROM pg_visibility_map('pgbench_accounts') LIMIT 1; SELECT * FROM pg_visibility_map('pgbench_accounts_1') LIMIT 1; SELECT * FROM pg_visibility_map('pgbench_accounts_pkey') LIMIT 1; SELECT * FROM pg_visibility_map('pgbench_accounts_1_pkey') LIMIT 1; SELECT * FROM pg_visibility('pgbench_accounts') LIMIT 1; SELECT * FROM pg_visibility('pgbench_accounts_1') LIMIT 1; SELECT * FROM pg_visibility('pgbench_accounts_pkey') LIMIT 1; SELECT * FROM pg_visibility('pgbench_accounts_1_pkey') LIMIT 1; SELECT * FROM pg_visibility_map_summary('pgbench_accounts'); SELECT * FROM pg_visibility_map_summary('pgbench_accounts_1'); SELECT * FROM pg_visibility_map_summary('pgbench_accounts_pkey'); SELECT * FROM pg_visibility_map_summary('pgbench_accounts_1_pkey'); SELECT * FROM pg_check_frozen('pgbench_accounts'); SELECT * FROM pg_check_frozen('pgbench_accounts_1'); SELECT * FROM pg_check_frozen('pgbench_accounts_pkey'); SELECT * FROM pg_check_frozen('pgbench_accounts_1_pkey'); SELECT * FROM pg_check_visible('pgbench_accounts'); SELECT * FROM pg_check_visible('pgbench_accounts_1'); SELECT * FROM pg_check_visible('pgbench_accounts_pkey'); SELECT * FROM pg_check_visible('pgbench_accounts_1_pkey'); SELECT pg_truncate_visibility_map('pgbench_accounts'); SELECT pg_truncate_visibility_map('pgbench_accounts_1'); SELECT pg_truncate_visibility_map('pgbench_accounts_pkey'); SELECT pg_truncate_visibility_map('pgbench_accounts_1_pkey');
v2-0001-Fix-assertion-failure-when-pg_prewarm-is-run-on-o.patch (text/x-diff, 2.7K) download From db240142ab4de334ef072f6af59a792701e806c5 Mon Sep 17 00:00:00 2001 From: Masahiro Ikeda <ikedamsh@oss.nttdata.com> Date: Fri, 16 May 2025 14:35:32 +0900 Subject: [PATCH v2 1/2] Fix assertion failure when pg_prewarm() is run on objects that don't have storage. This issue was introduced by commit 049ef33. Specifying objects that don't have storage as an argument to pg_prewarm() could trigger an assertion failure: Failed Assert("RelFileNumberIsValid(rlocator.relNumber)") This fix ensures that such cases are handled appropriately. --- contrib/pg_prewarm/pg_prewarm.c | 8 ++++++++ contrib/pg_prewarm/t/001_basic.pl | 11 ++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/contrib/pg_prewarm/pg_prewarm.c b/contrib/pg_prewarm/pg_prewarm.c index 50808569bd7..1f89c9adc86 100644 --- a/contrib/pg_prewarm/pg_prewarm.c +++ b/contrib/pg_prewarm/pg_prewarm.c @@ -112,6 +112,14 @@ pg_prewarm(PG_FUNCTION_ARGS) if (aclresult != ACLCHECK_OK) aclcheck_error(aclresult, get_relkind_objtype(rel->rd_rel->relkind), get_rel_name(relOid)); + /* Check that the storage exists. */ + if (!RELKIND_HAS_STORAGE(rel->rd_rel->relkind)) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("relation \"%s\" does not have storage", + RelationGetRelationName(rel)), + errdetail_relkind_not_supported(rel->rd_rel->relkind))); + /* Check that the fork exists. */ if (!smgrexists(RelationGetSmgr(rel), forkNumber)) ereport(ERROR, diff --git a/contrib/pg_prewarm/t/001_basic.pl b/contrib/pg_prewarm/t/001_basic.pl index 0a8259d3678..f7c31ae60a8 100644 --- a/contrib/pg_prewarm/t/001_basic.pl +++ b/contrib/pg_prewarm/t/001_basic.pl @@ -23,7 +23,10 @@ $node->start; $node->safe_psql("postgres", "CREATE EXTENSION pg_prewarm;\n" . "CREATE TABLE test(c1 int);\n" - . "INSERT INTO test SELECT generate_series(1, 100);"); + . "INSERT INTO test SELECT generate_series(1, 100);\n" + . "CREATE TABLE test_part(c1 int) PARTITION BY RANGE (c1);\n" + . "CREATE TABLE test_part1 PARTITION OF test_part FOR VALUES FROM (1) TO (1000);\n" + . "INSERT INTO test_part SELECT generate_series(1, 100);"); # test read mode my $result = @@ -42,6 +45,12 @@ ok( ( $stdout =~ qr/^[1-9][0-9]*$/ or $stderr =~ qr/prefetch is not supported by this build/), 'prefetch mode succeeded'); +# test partition table +($cmdret, $stdout, $stderr) = + $node->psql("postgres", "SELECT pg_prewarm('test_part', 'buffer');"); +ok( $stderr =~ /relation "test_part" does not have storage/, + 'detected storage does not exist'); + # test autoprewarm_dump_now() $result = $node->safe_psql("postgres", "SELECT autoprewarm_dump_now();"); like($result, qr/^[1-9][0-9]*$/, 'autoprewarm_dump_now succeeded'); -- 2.34.1
v2-0002-Fix-error-message-details-for-partitioned-indexes.patch (text/x-diff, 1.8K) download From 83f92645ff1f934e7960534c32ad2d67b2f0b910 Mon Sep 17 00:00:00 2001 From: Masahiro Ikeda <ikedamsh@oss.nttdata.com> Date: Fri, 16 May 2025 14:41:27 +0900 Subject: [PATCH v2 2/2] Fix error message details for partitioned indexes in amcheck Until now, the error detail could be misleading when bt_index_check() is run on partitioned indexes. For example, the index "pgbench_accounts_pkey" is both a btree and a partitioned index. Before this change, the error message was: > ERROR: expected "btree" index as targets for verification > DETAIL: Relation "pgbench_accounts_pkey" is a btree index. This change adds the word "partitioned" to the error detail to avoid confusion about why the error occurred. After this change, the error message becomes: > ERROR: expected "btree" index as targets for verification > DETAIL: Relation "pgbench_accounts_pkey" is a btree partitioned index. --- contrib/amcheck/verify_common.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/contrib/amcheck/verify_common.c b/contrib/amcheck/verify_common.c index d095e62ce55..b68ddaf895d 100644 --- a/contrib/amcheck/verify_common.c +++ b/contrib/amcheck/verify_common.c @@ -169,8 +169,9 @@ index_checkable(Relation rel, Oid am_id) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("expected \"%s\" index as targets for verification", NameStr(((Form_pg_am) GETSTRUCT(amtup))->amname)), - errdetail("Relation \"%s\" is a %s index.", - RelationGetRelationName(rel), NameStr(((Form_pg_am) GETSTRUCT(amtuprel))->amname)))); + errdetail("Relation \"%s\" is a %s %sindex.", + RelationGetRelationName(rel), NameStr(((Form_pg_am) GETSTRUCT(amtuprel))->amname), + (rel->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) ? "partitioned " : ""))); } if (RELATION_IS_OTHER_TEMP(rel)) -- 2.34.1
test_result.txt (text/plain, 20.9K) download CREATE EXTENSION IF NOT EXISTS pg_prewarm; psql:test.sql:7: NOTICE: extension "pg_prewarm" already exists, skipping CREATE EXTENSION SELECT pg_prewarm('pgbench_accounts'); psql:test.sql:9: ERROR: relation "pgbench_accounts" does not have storage DETAIL: This operation is not supported for partitioned tables. SELECT pg_prewarm('pgbench_accounts_1'); pg_prewarm ------------ 580 (1 row) SELECT pg_prewarm('pgbench_accounts_pkey'); psql:test.sql:11: ERROR: relation "pgbench_accounts_pkey" does not have storage DETAIL: This operation is not supported for partitioned indexes. SELECT pg_prewarm('pgbench_accounts_1_pkey'); pg_prewarm ------------ 94 (1 row) CREATE EXTENSION IF NOT EXISTS amcheck; psql:test.sql:15: NOTICE: extension "amcheck" already exists, skipping CREATE EXTENSION SELECT bt_index_check('pgbench_accounts'::regclass, true, true); psql:test.sql:16: ERROR: "pgbench_accounts" is not an index SELECT bt_index_check('pgbench_accounts_1'::regclass, true, true); psql:test.sql:17: ERROR: "pgbench_accounts_1" is not an index SELECT bt_index_check('pgbench_accounts_pkey'::regclass, true, true); psql:test.sql:18: ERROR: expected "btree" index as targets for verification DETAIL: Relation "pgbench_accounts_pkey" is a btree index. SELECT bt_index_check('pgbench_accounts_1_pkey'::regclass, true, true); bt_index_check ---------------- (1 row) SELECT bt_index_parent_check('pgbench_accounts'::regclass, true, true); psql:test.sql:21: ERROR: "pgbench_accounts" is not an index SELECT bt_index_parent_check('pgbench_accounts_1'::regclass, true, true); psql:test.sql:22: ERROR: "pgbench_accounts_1" is not an index SELECT bt_index_parent_check('pgbench_accounts_pkey'::regclass, true, true); psql:test.sql:23: ERROR: expected "btree" index as targets for verification DETAIL: Relation "pgbench_accounts_pkey" is a btree index. SELECT bt_index_parent_check('pgbench_accounts_1_pkey'::regclass, true, true); bt_index_parent_check ----------------------- (1 row) SELECT gin_index_check('pgbench_accounts'::regclass); psql:test.sql:26: ERROR: "pgbench_accounts" is not an index SELECT gin_index_check('pgbench_accounts_1'::regclass); psql:test.sql:27: ERROR: "pgbench_accounts_1" is not an index SELECT gin_index_check('pgbench_accounts_pkey'::regclass); psql:test.sql:28: ERROR: expected "gin" index as targets for verification DETAIL: Relation "pgbench_accounts_pkey" is a btree index. SELECT gin_index_check('pgbench_accounts_1_pkey'::regclass); psql:test.sql:29: ERROR: expected "gin" index as targets for verification DETAIL: Relation "pgbench_accounts_1_pkey" is a btree index. SELECT verify_heapam('pgbench_accounts'::regclass); psql:test.sql:31: ERROR: cannot check relation "pgbench_accounts" DETAIL: This operation is not supported for partitioned tables. SELECT verify_heapam('pgbench_accounts_1'::regclass); verify_heapam --------------- (0 rows) SELECT verify_heapam('pgbench_accounts_pkey'::regclass); psql:test.sql:33: ERROR: cannot check relation "pgbench_accounts_pkey" DETAIL: This operation is not supported for partitioned indexes. SELECT verify_heapam('pgbench_accounts_1_pkey'::regclass); psql:test.sql:34: ERROR: cannot check relation "pgbench_accounts_1_pkey" DETAIL: This operation is not supported for indexes. SELECT brin_summarize_new_values('pgbench_accounts'::regclass); psql:test.sql:37: ERROR: "pgbench_accounts" is not an index SELECT brin_summarize_new_values('pgbench_accounts_1'::regclass); psql:test.sql:38: ERROR: "pgbench_accounts_1" is not an index SELECT brin_summarize_new_values('pgbench_accounts_pkey'::regclass); psql:test.sql:39: ERROR: "pgbench_accounts_pkey" is not a BRIN index SELECT brin_summarize_new_values('pgbench_accounts_1_pkey'::regclass); psql:test.sql:40: ERROR: "pgbench_accounts_1_pkey" is not a BRIN index SELECT brin_summarize_range('pgbench_accounts'::regclass, 1); psql:test.sql:42: ERROR: "pgbench_accounts" is not an index SELECT brin_summarize_range('pgbench_accounts_1'::regclass, 1); psql:test.sql:43: ERROR: "pgbench_accounts_1" is not an index SELECT brin_summarize_range('pgbench_accounts_pkey'::regclass, 1); psql:test.sql:44: ERROR: "pgbench_accounts_pkey" is not a BRIN index SELECT brin_summarize_range('pgbench_accounts_1_pkey'::regclass, 1); psql:test.sql:45: ERROR: "pgbench_accounts_1_pkey" is not a BRIN index SELECT brin_desummarize_range('pgbench_accounts'::regclass, 1); psql:test.sql:47: ERROR: "pgbench_accounts" is not an index SELECT brin_desummarize_range('pgbench_accounts_1'::regclass, 1); psql:test.sql:48: ERROR: "pgbench_accounts_1" is not an index SELECT brin_desummarize_range('pgbench_accounts_pkey'::regclass, 1); psql:test.sql:49: ERROR: "pgbench_accounts_pkey" is not a BRIN index SELECT brin_desummarize_range('pgbench_accounts_1_pkey'::regclass, 1); psql:test.sql:50: ERROR: "pgbench_accounts_1_pkey" is not a BRIN index CREATE EXTENSION IF NOT EXISTS pageinspect; psql:test.sql:53: NOTICE: extension "pageinspect" already exists, skipping CREATE EXTENSION SELECT tuple_data_split( 'pgbench_accounts'::regclass, t_data, t_infomask, t_infomask2, t_bits ) FROM heap_page_items(get_raw_page('pgbench_accounts_1', 2)) LIMIT 1; psql:test.sql:59: ERROR: only heap AM is supported SELECT tuple_data_split( 'pgbench_accounts_1'::regclass, t_data, t_infomask, t_infomask2, t_bits ) FROM heap_page_items(get_raw_page('pgbench_accounts_1', 2)) LIMIT 1; tuple_data_split ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"\\x7b000000","\\x01000000","\\x00000000","\\xab202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020"} (1 row) SELECT tuple_data_split( 'pgbench_accounts_pkey'::regclass, t_data, t_infomask, t_infomask2, t_bits ) FROM heap_page_items(get_raw_page('pgbench_accounts_1', 2)) LIMIT 1; psql:test.sql:69: ERROR: only heap AM is supported SELECT tuple_data_split( 'pgbench_accounts_1_pkey'::regclass, t_data, t_infomask, t_infomask2, t_bits ) FROM heap_page_items(get_raw_page('pgbench_accounts_1', 2)) LIMIT 1; psql:test.sql:74: ERROR: only heap AM is supported SELECT * FROM heap_page_item_attrs( get_raw_page('pgbench_accounts', 0), 'pgbench_accounts'::regclass ) LIMIT 1; psql:test.sql:79: ERROR: cannot get raw page from relation "pgbench_accounts" DETAIL: This operation is not supported for partitioned tables. SELECT * FROM heap_page_item_attrs( get_raw_page('pgbench_accounts_1', 0), 'pgbench_accounts_1'::regclass ) LIMIT 1; lp | lp_off | lp_flags | lp_len | t_xmin | t_xmax | t_field3 | t_ctid | t_infomask2 | t_infomask | t_hoff | t_bits | t_oid | t_attrs ----+--------+----------+--------+--------+--------+----------+--------+-------------+------------+--------+--------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 | 8064 | 1 | 121 | 766 | 0 | 8 | (0,1) | 4 | 2306 | 24 | | | {"\\x01000000","\\x01000000","\\x00000000","\\xab202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020"} (1 row) SELECT * FROM heap_page_item_attrs( get_raw_page('pgbench_accounts_pkey', 0), 'pgbench_accounts_pkey'::regclass ) LIMIT 1; psql:test.sql:87: ERROR: cannot get raw page from relation "pgbench_accounts_pkey" DETAIL: This operation is not supported for partitioned indexes. SELECT * FROM heap_page_item_attrs( get_raw_page('pgbench_accounts_1_pkey', 0), 'pgbench_accounts_1_pkey'::regclass ) LIMIT 1; lp | lp_off | lp_flags | lp_len | t_xmin | t_xmax | t_field3 | t_ctid | t_infomask2 | t_infomask | t_hoff | t_bits | t_oid | t_attrs ----+--------+----------+--------+--------+--------+----------+--------+-------------+------------+--------+--------+-------+--------- 1 | 12642 | 2 | 2 | | | | | | | | | | (1 row) SELECT * FROM gist_page_items( get_raw_page('pgbench_accounts', 1), 'pgbench_accounts'::regclass ); psql:test.sql:96: ERROR: cannot get raw page from relation "pgbench_accounts" DETAIL: This operation is not supported for partitioned tables. SELECT * FROM gist_page_items( get_raw_page('pgbench_accounts_1', 1), 'pgbench_accounts_1'::regclass ); psql:test.sql:100: ERROR: "pgbench_accounts_1" is not an index SELECT * FROM gist_page_items( get_raw_page('pgbench_accounts_pkey', 1), 'pgbench_accounts_pkey'::regclass ); psql:test.sql:104: ERROR: cannot get raw page from relation "pgbench_accounts_pkey" DETAIL: This operation is not supported for partitioned indexes. SELECT * FROM gist_page_items( get_raw_page('pgbench_accounts_1_pkey', 1), 'pgbench_accounts_1_pkey'::regclass ); psql:test.sql:108: ERROR: "pgbench_accounts_1_pkey" is not a GiST index CREATE EXTENSION IF NOT EXISTS pgstattuple; psql:test.sql:111: NOTICE: extension "pgstattuple" already exists, skipping CREATE EXTENSION SELECT * FROM pgstattuple('pgbench_accounts'); psql:test.sql:113: ERROR: cannot get tuple-level statistics for relation "pgbench_accounts" DETAIL: This operation is not supported for partitioned tables. SELECT * FROM pgstattuple('pgbench_accounts_1'); table_len | tuple_count | tuple_len | tuple_percent | dead_tuple_count | dead_tuple_len | dead_tuple_percent | free_space | free_percent -----------+-------------+-----------+---------------+------------------+----------------+--------------------+------------+-------------- 4751360 | 33334 | 4033414 | 84.89 | 0 | 0 | 0 | 67808 | 1.43 (1 row) SELECT * FROM pgstattuple('pgbench_accounts_pkey'); psql:test.sql:115: ERROR: cannot get tuple-level statistics for relation "pgbench_accounts_pkey" DETAIL: This operation is not supported for partitioned indexes. SELECT * FROM pgstattuple('pgbench_accounts_1_pkey'); table_len | tuple_count | tuple_len | tuple_percent | dead_tuple_count | dead_tuple_len | dead_tuple_percent | free_space | free_percent -----------+-------------+-----------+---------------+------------------+----------------+--------------------+------------+-------------- 770048 | 33334 | 533344 | 69.26 | 0 | 0 | 0 | 81484 | 10.58 (1 row) SELECT * FROM pgstatindex('pgbench_accounts_pkey'); psql:test.sql:118: ERROR: relation "pgbench_accounts_pkey" is not a btree index SELECT * FROM pgstatindex('pgbench_accounts_1_pkey'); version | tree_level | index_size | root_block_no | internal_pages | leaf_pages | empty_pages | deleted_pages | avg_leaf_density | leaf_fragmentation ---------+------------+------------+---------------+----------------+------------+-------------+---------------+------------------+-------------------- 4 | 1 | 770048 | 3 | 1 | 92 | 0 | 0 | 89.14 | 0 (1 row) SELECT * FROM pgstatindex('pgbench_accounts'); psql:test.sql:120: ERROR: relation "pgbench_accounts" is not a btree index SELECT * FROM pgstatindex('pgbench_accounts_1'); psql:test.sql:121: ERROR: relation "pgbench_accounts_1" is not a btree index SELECT * FROM pgstatginindex('pgbench_accounts_pkey'); psql:test.sql:123: ERROR: relation "pgbench_accounts_pkey" is not a GIN index SELECT * FROM pgstatginindex('pgbench_accounts_1_pkey'); psql:test.sql:124: ERROR: relation "pgbench_accounts_1_pkey" is not a GIN index SELECT * FROM pgstatginindex('pgbench_accounts'); psql:test.sql:125: ERROR: relation "pgbench_accounts" is not a GIN index SELECT * FROM pgstatginindex('pgbench_accounts_1'); psql:test.sql:126: ERROR: relation "pgbench_accounts_1" is not a GIN index SELECT * FROM pgstathashindex('pgbench_accounts_pkey'); psql:test.sql:128: ERROR: relation "pgbench_accounts_pkey" is not a hash index SELECT * FROM pgstathashindex('pgbench_accounts_1_pkey'); psql:test.sql:129: ERROR: relation "pgbench_accounts_1_pkey" is not a hash index SELECT * FROM pgstathashindex('pgbench_accounts'); psql:test.sql:130: ERROR: relation "pgbench_accounts" is not a hash index SELECT * FROM pgstathashindex('pgbench_accounts_1'); psql:test.sql:131: ERROR: relation "pgbench_accounts_1" is not a hash index SELECT pg_relpages('pgbench_accounts'); psql:test.sql:133: ERROR: cannot get page count of relation "pgbench_accounts" DETAIL: This operation is not supported for partitioned tables. SELECT pg_relpages('pgbench_accounts_1'); pg_relpages ------------- 580 (1 row) SELECT pg_relpages('pgbench_accounts_pkey'); psql:test.sql:135: ERROR: cannot get page count of relation "pgbench_accounts_pkey" DETAIL: This operation is not supported for partitioned indexes. SELECT pg_relpages('pgbench_accounts_1_pkey'); pg_relpages ------------- 94 (1 row) SELECT * FROM pgstattuple_approx('pgbench_accounts'); psql:test.sql:138: ERROR: relation "pgbench_accounts" is of wrong relation kind DETAIL: This operation is not supported for partitioned tables. SELECT * FROM pgstattuple_approx('pgbench_accounts_1'); table_len | scanned_percent | approx_tuple_count | approx_tuple_len | approx_tuple_percent | dead_tuple_count | dead_tuple_len | dead_tuple_percent | approx_free_space | approx_free_percent -----------+-------------------+--------------------+------------------+----------------------+------------------+----------------+--------------------+-------------------+--------------------- 4751360 | 5.689655172413793 | 31437 | 4424160 | 93.11355064655173 | 0 | 0 | 0 | 56864 | 1.1967941810344827 (1 row) SELECT * FROM pgstattuple_approx('pgbench_accounts_pkey'); psql:test.sql:140: ERROR: relation "pgbench_accounts_pkey" is of wrong relation kind DETAIL: This operation is not supported for partitioned indexes. SELECT * FROM pgstattuple_approx('pgbench_accounts_1_pkey'); psql:test.sql:141: ERROR: relation "pgbench_accounts_1_pkey" is of wrong relation kind DETAIL: This operation is not supported for indexes. CREATE EXTENSION IF NOT EXISTS pg_surgery; psql:test.sql:144: NOTICE: extension "pg_surgery" already exists, skipping CREATE EXTENSION SELECT heap_force_kill('pgbench_accounts', ARRAY['(0, 1)']::tid[]); psql:test.sql:145: ERROR: cannot operate on relation "pgbench_accounts" DETAIL: This operation is not supported for partitioned tables. SELECT heap_force_kill('pgbench_accounts_1', ARRAY['(0, 1)']::tid[]); heap_force_kill ----------------- (1 row) SELECT heap_force_kill('pgbench_accounts_pkey', ARRAY['(0, 1)']::tid[]); psql:test.sql:147: ERROR: cannot operate on relation "pgbench_accounts_pkey" DETAIL: This operation is not supported for partitioned indexes. SELECT heap_force_kill('pgbench_accounts_1_pkey', ARRAY['(0, 1)']::tid[]); psql:test.sql:148: ERROR: cannot operate on relation "pgbench_accounts_1_pkey" DETAIL: This operation is not supported for indexes. SELECT heap_force_freeze('pgbench_accounts', ARRAY['(0, 1)']::tid[]); psql:test.sql:150: ERROR: cannot operate on relation "pgbench_accounts" DETAIL: This operation is not supported for partitioned tables. SELECT heap_force_freeze('pgbench_accounts_1', ARRAY['(0, 1)']::tid[]); psql:test.sql:151: NOTICE: skipping tid (0, 1) for relation "pgbench_accounts_1" because it is marked dead heap_force_freeze ------------------- (1 row) SELECT heap_force_freeze('pgbench_accounts_pkey', ARRAY['(0, 1)']::tid[]); psql:test.sql:152: ERROR: cannot operate on relation "pgbench_accounts_pkey" DETAIL: This operation is not supported for partitioned indexes. SELECT heap_force_freeze('pgbench_accounts_1_pkey', ARRAY['(0, 1)']::tid[]); psql:test.sql:153: ERROR: cannot operate on relation "pgbench_accounts_1_pkey" DETAIL: This operation is not supported for indexes. CREATE EXTENSION IF NOT EXISTS pg_visibility; psql:test.sql:156: NOTICE: extension "pg_visibility" already exists, skipping CREATE EXTENSION SELECT * FROM pg_visibility_map('pgbench_accounts') LIMIT 1; psql:test.sql:158: ERROR: relation "pgbench_accounts" is of wrong relation kind DETAIL: This operation is not supported for partitioned tables. SELECT * FROM pg_visibility_map('pgbench_accounts_1') LIMIT 1; blkno | all_visible | all_frozen -------+-------------+------------ 0 | f | f (1 row) SELECT * FROM pg_visibility_map('pgbench_accounts_pkey') LIMIT 1; psql:test.sql:160: ERROR: relation "pgbench_accounts_pkey" is of wrong relation kind DETAIL: This operation is not supported for partitioned indexes. SELECT * FROM pg_visibility_map('pgbench_accounts_1_pkey') LIMIT 1; psql:test.sql:161: ERROR: relation "pgbench_accounts_1_pkey" is of wrong relation kind DETAIL: This operation is not supported for indexes. SELECT * FROM pg_visibility('pgbench_accounts') LIMIT 1; psql:test.sql:163: ERROR: relation "pgbench_accounts" is of wrong relation kind DETAIL: This operation is not supported for partitioned tables. SELECT * FROM pg_visibility('pgbench_accounts_1') LIMIT 1; blkno | all_visible | all_frozen | pd_all_visible -------+-------------+------------+---------------- 0 | f | f | f (1 row) SELECT * FROM pg_visibility('pgbench_accounts_pkey') LIMIT 1; psql:test.sql:165: ERROR: relation "pgbench_accounts_pkey" is of wrong relation kind DETAIL: This operation is not supported for partitioned indexes. SELECT * FROM pg_visibility('pgbench_accounts_1_pkey') LIMIT 1; psql:test.sql:166: ERROR: relation "pgbench_accounts_1_pkey" is of wrong relation kind DETAIL: This operation is not supported for indexes. SELECT * FROM pg_visibility_map_summary('pgbench_accounts'); psql:test.sql:168: ERROR: relation "pgbench_accounts" is of wrong relation kind DETAIL: This operation is not supported for partitioned tables. SELECT * FROM pg_visibility_map_summary('pgbench_accounts_1'); all_visible | all_frozen -------------+------------ 546 | 0 (1 row) SELECT * FROM pg_visibility_map_summary('pgbench_accounts_pkey'); psql:test.sql:170: ERROR: relation "pgbench_accounts_pkey" is of wrong relation kind DETAIL: This operation is not supported for partitioned indexes. SELECT * FROM pg_visibility_map_summary('pgbench_accounts_1_pkey'); psql:test.sql:171: ERROR: relation "pgbench_accounts_1_pkey" is of wrong relation kind DETAIL: This operation is not supported for indexes. SELECT * FROM pg_check_frozen('pgbench_accounts'); psql:test.sql:173: ERROR: relation "pgbench_accounts" is of wrong relation kind DETAIL: This operation is not supported for partitioned tables. SELECT * FROM pg_check_frozen('pgbench_accounts_1'); t_ctid -------- (0 rows) SELECT * FROM pg_check_frozen('pgbench_accounts_pkey'); psql:test.sql:175: ERROR: relation "pgbench_accounts_pkey" is of wrong relation kind DETAIL: This operation is not supported for partitioned indexes. SELECT * FROM pg_check_frozen('pgbench_accounts_1_pkey'); psql:test.sql:176: ERROR: relation "pgbench_accounts_1_pkey" is of wrong relation kind DETAIL: This operation is not supported for indexes. SELECT * FROM pg_check_visible('pgbench_accounts'); psql:test.sql:178: ERROR: relation "pgbench_accounts" is of wrong relation kind DETAIL: This operation is not supported for partitioned tables. SELECT * FROM pg_check_visible('pgbench_accounts_1'); t_ctid -------- (0 rows) SELECT * FROM pg_check_visible('pgbench_accounts_pkey'); psql:test.sql:180: ERROR: relation "pgbench_accounts_pkey" is of wrong relation kind DETAIL: This operation is not supported for partitioned indexes. SELECT * FROM pg_check_visible('pgbench_accounts_1_pkey'); psql:test.sql:181: ERROR: relation "pgbench_accounts_1_pkey" is of wrong relation kind DETAIL: This operation is not supported for indexes. SELECT pg_truncate_visibility_map('pgbench_accounts'); psql:test.sql:183: ERROR: relation "pgbench_accounts" is of wrong relation kind DETAIL: This operation is not supported for partitioned tables. SELECT pg_truncate_visibility_map('pgbench_accounts_1'); pg_truncate_visibility_map ---------------------------- (1 row) SELECT pg_truncate_visibility_map('pgbench_accounts_pkey'); psql:test.sql:185: ERROR: relation "pgbench_accounts_pkey" is of wrong relation kind DETAIL: This operation is not supported for partitioned indexes. SELECT pg_truncate_visibility_map('pgbench_accounts_1_pkey'); psql:test.sql:186: ERROR: relation "pgbench_accounts_1_pkey" is of wrong relation kind DETAIL: This operation is not supported for indexes.

view thread (18+ messages)  latest in thread

Message-ID: <8829854bbfc8635ddecd0846bb72dfda@oss.nttdata.com>
Permalink:  ../8829854bbfc8635ddecd0846bb72dfda@oss.nttdata.com/
Also on:    postgresql.org/message-id/8829854bbfc8635ddecd0846bb72dfda@oss.nttdata.com

 ·  · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-hackers@postgresql.org
  Cc: ikedamsh@oss.nttdata.com, guofenglinux@gmail.com, dilipbalaut@gmail.com, masao.fujii@oss.nttdata.com, pgsql-hackers@lists.postgresql.org
  Subject: Re: Assertion failure in smgr.c when using pg_prewarm with partitioned tables
  In-Reply-To: <8829854bbfc8635ddecd0846bb72dfda@oss.nttdata.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox