From 6f83c026ddfe9cda14a9c5e965841b6cd2df0a2a Mon Sep 17 00:00:00 2001 From: Dilip Kumar Date: Wed, 24 Mar 2021 17:08:31 +0530 Subject: [PATCH v3 3/3] ALTER SET COMPRESSION for index columns --- src/backend/commands/tablecmds.c | 2 +- src/bin/psql/tab-complete.c | 4 ++-- src/test/regress/expected/compression.out | 16 ++++++++++++++++ src/test/regress/expected/compression_1.out | 6 ++++++ src/test/regress/sql/compression.sql | 4 ++++ 5 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 3349bcf..6d5b79d 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -4335,7 +4335,7 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, pass = AT_PASS_MISC; break; case AT_SetCompression: /* ALTER COLUMN SET COMPRESSION */ - ATSimplePermissions(rel, ATT_TABLE | ATT_MATVIEW); + ATSimplePermissions(rel, ATT_TABLE | ATT_MATVIEW | ATT_INDEX); /* This command never recurses */ /* No command-specific prep needed */ pass = AT_PASS_MISC; diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index b67f4ea..305665e 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -1772,10 +1772,10 @@ psql_completion(const char *text, int start, int end) } /* ALTER INDEX ALTER COLUMN */ else if (Matches("ALTER", "INDEX", MatchAny, "ALTER", "COLUMN", MatchAny)) - COMPLETE_WITH("SET STATISTICS"); + COMPLETE_WITH("SET"); /* ALTER INDEX ALTER COLUMN SET */ else if (Matches("ALTER", "INDEX", MatchAny, "ALTER", "COLUMN", MatchAny, "SET")) - COMPLETE_WITH("STATISTICS"); + COMPLETE_WITH("COMPRESSION", "STATISTICS"); /* ALTER INDEX ALTER COLUMN SET STATISTICS */ else if (Matches("ALTER", "INDEX", MatchAny, "ALTER", "COLUMN", MatchAny, "SET", "STATISTICS")) { diff --git a/src/test/regress/expected/compression.out b/src/test/regress/expected/compression.out index 19707fb..000983f 100644 --- a/src/test/regress/expected/compression.out +++ b/src/test/regress/expected/compression.out @@ -326,6 +326,22 @@ generate_series(1, 50) g), VERSION()); expr | text | yes | (f1 || f2) | extended | pglz | unique, btree, for table "public.cmdata2" +CREATE INDEX idx2 ON cmdata2(f2); +\d+ idx2 + Index "public.idx2" + Column | Type | Key? | Definition | Storage | Compression | Stats target +--------+------+------+------------+----------+-------------+-------------- + f2 | text | yes | f2 | extended | lz4 | +btree, for table "public.cmdata2" + +ALTER INDEX idx2 ALTER COLUMN f2 SET COMPRESSION pglz; +\d+ idx2 + Index "public.idx2" + Column | Type | Key? | Definition | Storage | Compression | Stats target +--------+------+------+------------+----------+-------------+-------------- + f2 | text | yes | f2 | extended | pglz | +btree, for table "public.cmdata2" + -- check data is ok SELECT length(f1) FROM cmdata; length diff --git a/src/test/regress/expected/compression_1.out b/src/test/regress/expected/compression_1.out index 84b933d..761fee4 100644 --- a/src/test/regress/expected/compression_1.out +++ b/src/test/regress/expected/compression_1.out @@ -324,6 +324,12 @@ ERROR: relation "cmdata2" does not exist LINE 1: INSERT INTO cmdata2 VALUES((SELECT array_agg(md5(g::TEXT))::... ^ \d+ idx1 +CREATE INDEX idx2 ON cmdata2(f2); +ERROR: relation "cmdata2" does not exist +\d+ idx2 +ALTER INDEX idx2 ALTER COLUMN f2 SET COMPRESSION pglz; +ERROR: relation "idx2" does not exist +\d+ idx2 -- check data is ok SELECT length(f1) FROM cmdata; length diff --git a/src/test/regress/sql/compression.sql b/src/test/regress/sql/compression.sql index 4afd5a2..6777f11 100644 --- a/src/test/regress/sql/compression.sql +++ b/src/test/regress/sql/compression.sql @@ -137,6 +137,10 @@ CREATE UNIQUE INDEX idx1 ON cmdata2 ((f1 || f2)); INSERT INTO cmdata2 VALUES((SELECT array_agg(md5(g::TEXT))::TEXT FROM generate_series(1, 50) g), VERSION()); \d+ idx1 +CREATE INDEX idx2 ON cmdata2(f2); +\d+ idx2 +ALTER INDEX idx2 ALTER COLUMN f2 SET COMPRESSION pglz; +\d+ idx2 -- check data is ok SELECT length(f1) FROM cmdata; -- 1.8.3.1