From a49bb41822cbdb0a16fc6b18bb7aa5b36b65a208 Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Tue, 10 Mar 2015 14:53:49 +0000 Subject: [PATCH] Dropped use of reltoastidxid field The same index can be reached going through reltoastrelid and pg_index.indrelid: checked at least on PG 9.1. --- META.json | 4 ++-- lib/pg_repack.sql.in | 5 ++++- lib/repack.c | 12 ++++++------ 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/META.json b/META.json index 1f59502..365ea5b 100644 --- a/META.json +++ b/META.json @@ -2,7 +2,7 @@ "name": "pg_repack", "abstract": "PostgreSQL module for data reorganization", "description": "Reorganize tables in PostgreSQL databases with minimal locks", - "version": "1.3.0", + "version": "1.3.1-pg94", "maintainer": [ "Josh Kupershmidt ", "Daniele Varrazzo ", @@ -14,7 +14,7 @@ "provides": { "pg_repack": { "file": "lib/pg_repack.sql", - "version": "1.3.0", + "version": "1.3.1-pg94", "abstract": "Reorganize tables in PostgreSQL databases with minimal locks" } }, diff --git a/lib/pg_repack.sql.in b/lib/pg_repack.sql.in index 23f66dc..574fb0e 100644 --- a/lib/pg_repack.sql.in +++ b/lib/pg_repack.sql.in @@ -172,7 +172,10 @@ CREATE VIEW repack.tables AS SELECT R.oid::regclass AS relname, R.oid AS relid, R.reltoastrelid AS reltoastrelid, - CASE WHEN R.reltoastrelid = 0 THEN 0 ELSE (SELECT reltoastidxid FROM pg_class WHERE oid = R.reltoastrelid) END AS reltoastidxid, + CASE WHEN R.reltoastrelid = 0 THEN 0 ELSE ( + SELECT indexrelid FROM pg_index + WHERE indrelid = R.reltoastrelid + AND indisvalid) END AS reltoastidxid, N.nspname AS schemaname, PK.indexrelid AS pkid, CK.indexrelid AS ckid, diff --git a/lib/repack.c b/lib/repack.c index 0d9861b..f5f5c61 100644 --- a/lib/repack.c +++ b/lib/repack.c @@ -784,12 +784,12 @@ repack_swap(PG_FUNCTION_ARGS) /* swap relfilenode and dependencies for tables. */ values[0] = ObjectIdGetDatum(oid); execute_with_args(SPI_OK_SELECT, - "SELECT X.reltoastrelid, TX.reltoastidxid, X.relowner," - " Y.oid, Y.reltoastrelid, TY.reltoastidxid, Y.relowner" - " FROM pg_catalog.pg_class X LEFT JOIN pg_catalog.pg_class TX" - " ON X.reltoastrelid = TX.oid," - " pg_catalog.pg_class Y LEFT JOIN pg_catalog.pg_class TY" - " ON Y.reltoastrelid = TY.oid" + "SELECT X.reltoastrelid, TX.indexrelid, X.relowner," + " Y.oid, Y.reltoastrelid, TY.indexrelid, Y.relowner" + " FROM pg_catalog.pg_class X LEFT JOIN pg_catalog.pg_index TX" + " ON X.reltoastrelid = TX.indrelid AND TX.indisvalid," + " pg_catalog.pg_class Y LEFT JOIN pg_catalog.pg_index TY" + " ON Y.reltoastrelid = TY.indrelid AND TY.indisvalid" " WHERE X.oid = $1" " AND Y.oid = ('repack.table_' || X.oid)::regclass", 1, argtypes, values, nulls);