summaryrefslogtreecommitdiff
path: root/src/test/isolation
diff options
context:
space:
mode:
authorTeodor Sigaev2018-04-07 20:00:39 +0000
committerTeodor Sigaev2018-04-07 20:00:39 +0000
commit8224de4f42ccf98e08db07b43d52fed72f962ebb (patch)
tree0c4aae878e522178def568fcd2dd274233780f88 /src/test/isolation
parent01bb85169afadfe63e2f0e344ff671292080de7e (diff)
Indexes with INCLUDE columns and their support in B-tree
This patch introduces INCLUDE clause to index definition. This clause specifies a list of columns which will be included as a non-key part in the index. The INCLUDE columns exist solely to allow more queries to benefit from index-only scans. Also, such columns don't need to have appropriate operator classes. Expressions are not supported as INCLUDE columns since they cannot be used in index-only scans. Index access methods supporting INCLUDE are indicated by amcaninclude flag in IndexAmRoutine. For now, only B-tree indexes support INCLUDE clause. In B-tree indexes INCLUDE columns are truncated from pivot index tuples (tuples located in non-leaf pages and high keys). Therefore, B-tree indexes now might have variable number of attributes. This patch also provides generic facility to support that: pivot tuples contain number of their attributes in t_tid.ip_posid. Free 13th bit of t_info is used for indicating that. This facility will simplify further support of index suffix truncation. The changes of above are backward-compatible, pg_upgrade doesn't need special handling of B-tree indexes for that. Bump catalog version Author: Anastasia Lubennikova with contribition by Alexander Korotkov and me Reviewed by: Peter Geoghegan, Tomas Vondra, Antonin Houska, Jeff Janes, David Rowley, Alexander Korotkov Discussion: https://www.postgresql.org/message-id/flat/56168952.4010101@postgrespro.ru
Diffstat (limited to 'src/test/isolation')
-rw-r--r--src/test/isolation/specs/insert-conflict-do-nothing-2.spec2
-rw-r--r--src/test/isolation/specs/insert-conflict-do-update-2.spec2
-rw-r--r--src/test/isolation/specs/lock-committed-keyupdate.spec2
-rw-r--r--src/test/isolation/specs/lock-update-traversal.spec5
4 files changed, 6 insertions, 5 deletions
diff --git a/src/test/isolation/specs/insert-conflict-do-nothing-2.spec b/src/test/isolation/specs/insert-conflict-do-nothing-2.spec
index f1e5bde357c..8a8ec944473 100644
--- a/src/test/isolation/specs/insert-conflict-do-nothing-2.spec
+++ b/src/test/isolation/specs/insert-conflict-do-nothing-2.spec
@@ -3,7 +3,7 @@
setup
{
- CREATE TABLE ints (key int primary key, val text);
+ CREATE TABLE ints (key int, val text, PRIMARY KEY (key) INCLUDE (val));
}
teardown
diff --git a/src/test/isolation/specs/insert-conflict-do-update-2.spec b/src/test/isolation/specs/insert-conflict-do-update-2.spec
index cd7e3f42feb..f5b4f601b58 100644
--- a/src/test/isolation/specs/insert-conflict-do-update-2.spec
+++ b/src/test/isolation/specs/insert-conflict-do-update-2.spec
@@ -7,7 +7,7 @@
setup
{
CREATE TABLE upsert (key text not null, payload text);
- CREATE UNIQUE INDEX ON upsert(lower(key));
+ CREATE UNIQUE INDEX ON upsert(lower(key)) INCLUDE (payload);
}
teardown
diff --git a/src/test/isolation/specs/lock-committed-keyupdate.spec b/src/test/isolation/specs/lock-committed-keyupdate.spec
index 1630282d0f4..3fb424af0ed 100644
--- a/src/test/isolation/specs/lock-committed-keyupdate.spec
+++ b/src/test/isolation/specs/lock-committed-keyupdate.spec
@@ -8,7 +8,7 @@
setup
{
DROP TABLE IF EXISTS lcku_table;
- CREATE TABLE lcku_table (id INTEGER PRIMARY KEY, value TEXT);
+ CREATE TABLE lcku_table (id INTEGER, value TEXT, PRIMARY KEY (id) INCLUDE (value));
INSERT INTO lcku_table VALUES (1, 'one');
INSERT INTO lcku_table VALUES (3, 'two');
}
diff --git a/src/test/isolation/specs/lock-update-traversal.spec b/src/test/isolation/specs/lock-update-traversal.spec
index 7042b9399cf..2ffe87d152b 100644
--- a/src/test/isolation/specs/lock-update-traversal.spec
+++ b/src/test/isolation/specs/lock-update-traversal.spec
@@ -7,8 +7,9 @@
setup
{
CREATE TABLE foo (
- key int PRIMARY KEY,
- value int
+ key int,
+ value int,
+ PRIMARY KEY (key) INCLUDE (value)
);
INSERT INTO foo VALUES (1, 1);