On Tue, Dec 9, 2014 at 4:44 PM, Michael Paquier
<[email protected]> wrote:
> On Tue, Dec 9, 2014 at 10:10 AM, Michael Paquier
> <[email protected]> wrote:
>> On Tue, Dec 2, 2014 at 3:42 PM, Michael Paquier
>> <[email protected]> wrote:
>>> Adding on top of that a couple of things cleaned up, like docs and
>>> typos, and I got the patch attached. Let's have a committer have a
>>> look a it now, I am marking that as "Ready for Committer".
>> For the archives, this has been committed as fe263d1. Thanks Simon for
>> looking and the final push. And sorry that I didn't spot the issue
>> with tap tests when reviewing, check-world passed but my dev VM missed
>> necessary perl packages.
> While re-looking at that. I just found that when selecting the
> relations that are reindexed for a schema we ignore materialized view
> as the key scan is only done using 'r' as relkind. The patch attached
> fixes that.
Here is an updated patch doing as well that:
- Regression test checking if user has permissions on schema was broken
- Silent NOTICE messages of REINDEX by having client_min_messages set
to WARINING (thoughts about having a plpgsql function doing
consistency checks of relfilenode before and after reindex?)
--
Michael
From 402afad6c124d2b74a5a82e36e017d2dedb0186d Mon Sep 17 00:00:00 2001
From: Michael Paquier <[email protected]>
Date: Tue, 9 Dec 2014 16:40:39 +0900
Subject: [PATCH] Fix a couple of bugs in REINDEX SCHEMA
The following issues are fixed:
- The key scan used was using a filter on relation relkind, but that's not
actually necessary as a filter is applied when building the list of OIDs
reindexed.
- Regression test checking permission of reindexed schema was broken
- Upgrade client_min_messages to 'warning' per complaints from jaragundi
and leech as the table reindex ordering is not entirely guaranteed (we
may as well here use a plpgsql function that does check if relfilenode
has been changed for the reindexed relations.
---
src/backend/commands/indexcmds.c | 8 ++------
src/test/regress/expected/create_index.out | 21 +++++++++------------
src/test/regress/sql/create_index.sql | 10 ++++++----
3 files changed, 17 insertions(+), 22 deletions(-)
diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c
index a3e8a15..9b07216 100644
--- a/src/backend/commands/indexcmds.c
+++ b/src/backend/commands/indexcmds.c
@@ -1867,16 +1867,12 @@ ReindexObject(const char *objectName, ReindexObjectType objectKind)
*/
if (objectKind == REINDEX_OBJECT_SCHEMA)
{
- scan_keys = palloc(sizeof(ScanKeyData) * 2);
+ scan_keys = palloc(sizeof(ScanKeyData));
ScanKeyInit(&scan_keys[0],
Anum_pg_class_relnamespace,
BTEqualStrategyNumber, F_OIDEQ,
ObjectIdGetDatum(objectOid));
- ScanKeyInit(&scan_keys[1],
- Anum_pg_class_relkind,
- BTEqualStrategyNumber, F_CHAREQ,
- 'r');
- num_keys = 2;
+ num_keys = 1;
}
else
num_keys = 0;
diff --git a/src/test/regress/expected/create_index.out b/src/test/regress/expected/create_index.out
index ebac939..418b0ec 100644
--- a/src/test/regress/expected/create_index.out
+++ b/src/test/regress/expected/create_index.out
@@ -2834,31 +2834,28 @@ explain (costs off)
--
-- REINDEX SCHEMA
--
+SET client_min_messages TO 'warning';
REINDEX SCHEMA schema_to_reindex; -- failure, schema does not exist
ERROR: schema "schema_to_reindex" does not exist
CREATE SCHEMA schema_to_reindex;
-CREATE TABLE schema_to_reindex.table1(col1 SERIAL PRIMARY KEY);
-CREATE TABLE schema_to_reindex.table2(col1 SERIAL PRIMARY KEY, col2 VARCHAR(100) NOT NULL);
-CREATE INDEX ON schema_to_reindex.table2(col2);
+CREATE TABLE schema_to_reindex.table(col1 SERIAL PRIMARY KEY);
+CREATE MATERIALIZED VIEW schema_to_reindex.matview AS SELECT col1 FROM schema_to_reindex.table;
+CREATE INDEX ON schema_to_reindex.matview(col1);
REINDEX SCHEMA schema_to_reindex;
-NOTICE: table "schema_to_reindex.table1" was reindexed
-NOTICE: table "schema_to_reindex.table2" was reindexed
BEGIN;
REINDEX SCHEMA schema_to_reindex; -- failure, cannot run in a transaction
ERROR: REINDEX SCHEMA cannot run inside a transaction block
END;
+RESET client_min_messages;
-- Failure for unauthorized user
-CREATE ROLE reindexuser login;
+CREATE ROLE user_reindex login;
SET SESSION ROLE user_reindex;
-ERROR: role "user_reindex" does not exist
REINDEX SCHEMA schema_to_reindex;
-NOTICE: table "schema_to_reindex.table1" was reindexed
-NOTICE: table "schema_to_reindex.table2" was reindexed
+ERROR: must be owner of schema schema_to_reindex
-- Clean up
RESET ROLE;
DROP ROLE user_reindex;
-ERROR: role "user_reindex" does not exist
DROP SCHEMA schema_to_reindex CASCADE;
NOTICE: drop cascades to 2 other objects
-DETAIL: drop cascades to table schema_to_reindex.table1
-drop cascades to table schema_to_reindex.table2
+DETAIL: drop cascades to table schema_to_reindex."table"
+drop cascades to materialized view schema_to_reindex.matview
diff --git a/src/test/regress/sql/create_index.sql b/src/test/regress/sql/create_index.sql
index 1cd57da..dd348b5 100644
--- a/src/test/regress/sql/create_index.sql
+++ b/src/test/regress/sql/create_index.sql
@@ -968,18 +968,20 @@ explain (costs off)
--
-- REINDEX SCHEMA
--
+SET client_min_messages TO 'warning';
REINDEX SCHEMA schema_to_reindex; -- failure, schema does not exist
CREATE SCHEMA schema_to_reindex;
-CREATE TABLE schema_to_reindex.table1(col1 SERIAL PRIMARY KEY);
-CREATE TABLE schema_to_reindex.table2(col1 SERIAL PRIMARY KEY, col2 VARCHAR(100) NOT NULL);
-CREATE INDEX ON schema_to_reindex.table2(col2);
+CREATE TABLE schema_to_reindex.table(col1 SERIAL PRIMARY KEY);
+CREATE MATERIALIZED VIEW schema_to_reindex.matview AS SELECT col1 FROM schema_to_reindex.table;
+CREATE INDEX ON schema_to_reindex.matview(col1);
REINDEX SCHEMA schema_to_reindex;
BEGIN;
REINDEX SCHEMA schema_to_reindex; -- failure, cannot run in a transaction
END;
+RESET client_min_messages;
-- Failure for unauthorized user
-CREATE ROLE reindexuser login;
+CREATE ROLE user_reindex login;
SET SESSION ROLE user_reindex;
REINDEX SCHEMA schema_to_reindex;
--
2.2.0
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers