On Thu, Mar 7, 2019 at 12:14 AM Heikki Linnakangas <hlinn...@iki.fi> wrote: > I haven't investigated any deeper, but apparently something's broken. > This was with patch v14, without any further changes.
Try it with my patch -- attached. I think that you missed that the INCLUDE indexes thing within nbtsort.c needs to be changed back. -- Peter Geoghegan
From cdfe29c5479da6198aa918f4c373cb8a1a1acfe1 Mon Sep 17 00:00:00 2001 From: Peter Geoghegan <p...@bowt.ie> Date: Mon, 21 Jan 2019 15:35:37 -0800 Subject: [PATCH 08/12] DEBUG: Force version 3 artificially. --- contrib/amcheck/expected/check_btree.out | 7 ++----- contrib/pageinspect/expected/btree.out | 2 +- contrib/pgstattuple/expected/pgstattuple.out | 10 +++++----- src/backend/access/nbtree/nbtpage.c | 2 +- src/backend/access/nbtree/nbtsort.c | 16 ++++------------ src/backend/postmaster/postmaster.c | 1 + src/test/regress/expected/dependency.out | 4 ++-- src/test/regress/expected/event_trigger.out | 4 ++-- src/test/regress/expected/foreign_data.out | 8 ++++---- src/test/regress/expected/rowsecurity.out | 4 ++-- 10 files changed, 24 insertions(+), 34 deletions(-) diff --git a/contrib/amcheck/expected/check_btree.out b/contrib/amcheck/expected/check_btree.out index 687fde8fce..60bebb1c00 100644 --- a/contrib/amcheck/expected/check_btree.out +++ b/contrib/amcheck/expected/check_btree.out @@ -139,11 +139,8 @@ VACUUM delete_test_table; DELETE FROM delete_test_table WHERE a < 79990; VACUUM delete_test_table; SELECT bt_index_parent_check('delete_test_table_pkey', true, true); - bt_index_parent_check ------------------------ - -(1 row) - +ERROR: index "delete_test_table_pkey" does not support relocating tuples +HINT: Only indexes initialized on PostgreSQL 12 support relocation verification. -- -- BUG #15597: must not assume consistent input toasting state when forming -- tuple. Bloom filter must fingerprint normalized index tuple representation. diff --git a/contrib/pageinspect/expected/btree.out b/contrib/pageinspect/expected/btree.out index 067e73f21a..7f003bf801 100644 --- a/contrib/pageinspect/expected/btree.out +++ b/contrib/pageinspect/expected/btree.out @@ -5,7 +5,7 @@ CREATE INDEX test1_a_idx ON test1 USING btree (a); SELECT * FROM bt_metap('test1_a_idx'); -[ RECORD 1 ]-----------+------- magic | 340322 -version | 4 +version | 3 root | 1 level | 0 fastroot | 1 diff --git a/contrib/pgstattuple/expected/pgstattuple.out b/contrib/pgstattuple/expected/pgstattuple.out index 9920dbfd40..9858ea69d4 100644 --- a/contrib/pgstattuple/expected/pgstattuple.out +++ b/contrib/pgstattuple/expected/pgstattuple.out @@ -48,7 +48,7 @@ select version, tree_level, from pgstatindex('test_pkey'); version | tree_level | index_size | root_block_no | internal_pages | leaf_pages | empty_pages | deleted_pages | avg_leaf_density | leaf_fragmentation ---------+------------+------------+---------------+----------------+------------+-------------+---------------+------------------+-------------------- - 4 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | NaN | NaN + 3 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | NaN | NaN (1 row) select version, tree_level, @@ -58,7 +58,7 @@ select version, tree_level, from pgstatindex('test_pkey'::text); version | tree_level | index_size | root_block_no | internal_pages | leaf_pages | empty_pages | deleted_pages | avg_leaf_density | leaf_fragmentation ---------+------------+------------+---------------+----------------+------------+-------------+---------------+------------------+-------------------- - 4 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | NaN | NaN + 3 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | NaN | NaN (1 row) select version, tree_level, @@ -68,7 +68,7 @@ select version, tree_level, from pgstatindex('test_pkey'::name); version | tree_level | index_size | root_block_no | internal_pages | leaf_pages | empty_pages | deleted_pages | avg_leaf_density | leaf_fragmentation ---------+------------+------------+---------------+----------------+------------+-------------+---------------+------------------+-------------------- - 4 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | NaN | NaN + 3 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | NaN | NaN (1 row) select version, tree_level, @@ -78,7 +78,7 @@ select version, tree_level, from pgstatindex('test_pkey'::regclass); version | tree_level | index_size | root_block_no | internal_pages | leaf_pages | empty_pages | deleted_pages | avg_leaf_density | leaf_fragmentation ---------+------------+------------+---------------+----------------+------------+-------------+---------------+------------------+-------------------- - 4 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | NaN | NaN + 3 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | NaN | NaN (1 row) select pg_relpages('test'); @@ -232,7 +232,7 @@ create index test_partition_hash_idx on test_partition using hash (a); select pgstatindex('test_partition_idx'); pgstatindex ------------------------------ - (4,0,8192,0,0,0,0,0,NaN,NaN) + (3,0,8192,0,0,0,0,0,NaN,NaN) (1 row) select pgstathashindex('test_partition_hash_idx'); diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c index 72af1ef3c1..11231dbfeb 100644 --- a/src/backend/access/nbtree/nbtpage.c +++ b/src/backend/access/nbtree/nbtpage.c @@ -57,7 +57,7 @@ _bt_initmetapage(Page page, BlockNumber rootbknum, uint32 level) metad = BTPageGetMeta(page); metad->btm_magic = BTREE_MAGIC; - metad->btm_version = BTREE_VERSION; + metad->btm_version = BTREE_NOVAC_VERSION; metad->btm_root = rootbknum; metad->btm_level = level; metad->btm_fastroot = rootbknum; diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c index 67cdb44cf5..69e16b33f4 100644 --- a/src/backend/access/nbtree/nbtsort.c +++ b/src/backend/access/nbtree/nbtsort.c @@ -800,6 +800,8 @@ _bt_buildadd(BTWriteState *wstate, BTPageState *state, IndexTuple itup) OffsetNumber last_off; Size pgspc; Size itupsz; + int indnatts = IndexRelationGetNumberOfAttributes(wstate->index); + int indnkeyatts = IndexRelationGetNumberOfKeyAttributes(wstate->index); /* * This is a handy place to check for cancel interrupts during the btree @@ -817,20 +819,10 @@ _bt_buildadd(BTWriteState *wstate, BTPageState *state, IndexTuple itup) /* * Check whether the item can fit on a btree page at all. - * - * Every newly built index will treat heap TID as part of the keyspace, - * which imposes the requirement that new high keys must occasionally have - * a heap TID appended within _bt_truncate(). That may leave a new pivot - * tuple one or two MAXALIGN() quantums larger than the original first - * right tuple it's derived from. v4 deals with the problem by decreasing - * the limit on the size of tuples inserted on the leaf level by the same - * small amount. Enforce the new v4+ limit on the leaf level, and the old - * limit on internal levels, since pivot tuples may need to make use of - * the resered space. This should never fail on internal pages. */ if (unlikely(itupsz > BTMaxItemSize(npage))) _bt_check_third_page(wstate->index, wstate->heap, - state->btps_level == 0, npage, itup); + false, npage, itup); /* * Check to see if page is "full". It's definitely full if the item won't @@ -876,7 +868,7 @@ _bt_buildadd(BTWriteState *wstate, BTPageState *state, IndexTuple itup) ItemIdSetUnused(ii); /* redundant */ ((PageHeader) opage)->pd_lower -= sizeof(ItemIdData); - if (P_ISLEAF(opageop)) + if (indnkeyatts != indnatts && P_ISLEAF(opageop)) { IndexTuple lastleft; IndexTuple truncated; diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index fe599632d3..d27577508e 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -2556,6 +2556,7 @@ InitProcessGlobals(void) ((uint64) MyStartTimestamp << 12) ^ ((uint64) MyStartTimestamp >> 20); } + rseed = 0; srandom(rseed); } diff --git a/src/test/regress/expected/dependency.out b/src/test/regress/expected/dependency.out index 8d31110b87..8e50f8ffbb 100644 --- a/src/test/regress/expected/dependency.out +++ b/src/test/regress/expected/dependency.out @@ -128,9 +128,9 @@ FROM pg_type JOIN pg_class c ON typrelid = c.oid WHERE typname = 'deptest_t'; -- doesn't work: grant still exists DROP USER regress_dep_user1; ERROR: role "regress_dep_user1" cannot be dropped because some objects depend on it -DETAIL: privileges for table deptest1 +DETAIL: owner of default privileges on new relations belonging to role regress_dep_user1 in schema deptest privileges for database regression -owner of default privileges on new relations belonging to role regress_dep_user1 in schema deptest +privileges for table deptest1 DROP OWNED BY regress_dep_user1; DROP USER regress_dep_user1; \set VERBOSITY terse diff --git a/src/test/regress/expected/event_trigger.out b/src/test/regress/expected/event_trigger.out index ac41419c7b..0e32d5c427 100644 --- a/src/test/regress/expected/event_trigger.out +++ b/src/test/regress/expected/event_trigger.out @@ -187,9 +187,9 @@ ERROR: event trigger "regress_event_trigger" does not exist -- should fail, regress_evt_user owns some objects drop role regress_evt_user; ERROR: role "regress_evt_user" cannot be dropped because some objects depend on it -DETAIL: owner of user mapping for regress_evt_user on server useless_server +DETAIL: owner of event trigger regress_event_trigger3 owner of default privileges on new relations belonging to role regress_evt_user -owner of event trigger regress_event_trigger3 +owner of user mapping for regress_evt_user on server useless_server -- cleanup before next test -- these are all OK; the second one should emit a NOTICE drop event trigger if exists regress_event_trigger2; diff --git a/src/test/regress/expected/foreign_data.out b/src/test/regress/expected/foreign_data.out index 9c763ec184..4d82d3a7e8 100644 --- a/src/test/regress/expected/foreign_data.out +++ b/src/test/regress/expected/foreign_data.out @@ -441,8 +441,8 @@ ALTER SERVER s1 OWNER TO regress_test_indirect; RESET ROLE; DROP ROLE regress_test_indirect; -- ERROR ERROR: role "regress_test_indirect" cannot be dropped because some objects depend on it -DETAIL: privileges for foreign-data wrapper foo -owner of server s1 +DETAIL: owner of server s1 +privileges for foreign-data wrapper foo \des+ List of foreign servers Name | Owner | Foreign-data wrapper | Access privileges | Type | Version | FDW options | Description @@ -1998,9 +1998,9 @@ DROP TABLE temp_parted; DROP SCHEMA foreign_schema CASCADE; DROP ROLE regress_test_role; -- ERROR ERROR: role "regress_test_role" cannot be dropped because some objects depend on it -DETAIL: owner of user mapping for regress_test_role on server s6 +DETAIL: privileges for server s4 privileges for foreign-data wrapper foo -privileges for server s4 +owner of user mapping for regress_test_role on server s6 DROP SERVER t1 CASCADE; NOTICE: drop cascades to user mapping for public on server t1 DROP USER MAPPING FOR regress_test_role SERVER s6; diff --git a/src/test/regress/expected/rowsecurity.out b/src/test/regress/expected/rowsecurity.out index bad5199d9e..2e170497c9 100644 --- a/src/test/regress/expected/rowsecurity.out +++ b/src/test/regress/expected/rowsecurity.out @@ -3503,8 +3503,8 @@ SELECT refclassid::regclass, deptype SAVEPOINT q; DROP ROLE regress_rls_eve; --fails due to dependency on POLICY p ERROR: role "regress_rls_eve" cannot be dropped because some objects depend on it -DETAIL: privileges for table tbl1 -target of policy p on table tbl1 +DETAIL: target of policy p on table tbl1 +privileges for table tbl1 ROLLBACK TO q; ALTER POLICY p ON tbl1 TO regress_rls_frank USING (true); SAVEPOINT q; -- 2.17.1