Skip to content

Commit ee1d94f

Browse files
committed
ALTER INDEX ... WHERE
1 parent 5e6bd0e commit ee1d94f

File tree

3 files changed

+29
-16
lines changed

3 files changed

+29
-16
lines changed

src/backend/commands/indexcmds.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ AlterIndex(Oid indexRelationId, IndexStmt *stmt)
368368
SPI_cursor_fetch(portal, true, 1);
369369
if (!SPI_processed) {
370370
break;
371-
}
371+
}
372372
tuple = SPI_tuptable->vals[0];
373373
tupleid = &tuple->t_data->t_ctid;
374374
ExecStoreTuple(tuple, slot, InvalidBuffer, false);

src/bin/insbench/insbench.cpp

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,11 @@ void* indexUpdater(void* arg)
126126
sleep(cfg.indexUpdateInterval);
127127
printf("Alter indexes\n");
128128
time_t now = getCurrentTime();
129+
time_t limit = cfg.useSystemTime ? now : currTimestamp;
129130
{
130131
work txn(con);
131132
for (int i = 0; i < cfg.nIndexes; i++) {
132-
exec(txn, "alter index idx%d where pk<%lu", i, cfg.useSystemTime ? now : currTimestamp);
133+
exec(txn, "alter index idx%d where pk<%lu", i, limit);
133134
}
134135
txn.commit();
135136
}
@@ -151,18 +152,6 @@ void initializeDatabase()
151152
time_t now = getCurrentTime();
152153
exec(txn, "drop table if exists t");
153154
exec(txn, "create table t (pk bigint, k1 bigint, k2 bigint, k3 bigint, k4 bigint, k5 bigint, k6 bigint, k7 bigint, k8 bigint)");
154-
if (!cfg.noPK) {
155-
exec(txn, "create index pk on t(pk)");
156-
}
157-
for (int i = 0; i < cfg.nIndexes; i++) {
158-
if (cfg.indexUpdateInterval == 0) {
159-
exec(txn, "create index idx%d on t(k%d)", i, i+1);
160-
} else if (cfg.useSystemTime) {
161-
exec(txn, "create index idx%d on t(k%d) where pk<%ld", i, i+1, now);
162-
} else {
163-
exec(txn, "create index idx%d on t(k%d) where pk<%ld", i, i+1, 0);
164-
}
165-
}
166155

167156
if (cfg.initialSize)
168157
{
@@ -186,9 +175,26 @@ void initializeDatabase()
186175
txn.prepared("insert")(cfg.initialSize)(cfg.initialSize-1).exec();
187176
currTimestamp = cfg.initialSize;
188177
}
189-
txn.exec("vacuum analyze");
178+
}
179+
if (!cfg.noPK) {
180+
exec(txn, "create index pk on t(pk)");
181+
}
182+
for (int i = 0; i < cfg.nIndexes; i++) {
183+
if (cfg.indexUpdateInterval == 0) {
184+
exec(txn, "create index idx%d on t(k%d)", i, i+1);
185+
} else if (cfg.useSystemTime) {
186+
exec(txn, "create index idx%d on t(k%d) where pk<%ld", i, i+1, now);
187+
} else {
188+
exec(txn, "create index idx%d on t(k%d) where pk<%ld", i, i+1, currTimestamp);
189+
}
190190
}
191191
txn.commit();
192+
{
193+
nontransaction txn(con);
194+
txn.exec("vacuum analyze");
195+
sleep(2);
196+
}
197+
printf("Database intialized\n");
192198
}
193199

194200

@@ -260,10 +266,11 @@ int main (int argc, char* argv[])
260266
for (int i = 0; i < cfg.nInserters; i++) {
261267
inserters[i].wait();
262268
}
269+
time_t elapsed = getCurrentTime() - start;
270+
263271
running = false;
264272
bgw.wait();
265273

266-
time_t elapsed = getCurrentTime() - start;
267274

268275
printf(
269276
"{\"tps\":%f, \"index_updates\":%d, \"max_update_time\":%ld, \"avg_update_time\":%f,"

src/bin/insbench/run.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
echo Insert with 1 index
2+
./insbench -c "dbname=postgres host=localhost port=5432 sslmode=disable" -x 0
3+
echo Insert with 9 indexex
4+
./insbench -c "dbname=postgres host=localhost port=5432 sslmode=disable" -x 8
5+
echo Insert with 9 partial indexes
6+
./insbench -c "dbname=postgres host=localhost port=5432 sslmode=disable" -x 8 -u 1

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy