pgsql: Get rid of pg_class.reltoastidxid.

Started by Fujii Masaoalmost 13 years ago6 messagescomitters
Jump to latest
#1Fujii Masao
masao.fujii@gmail.com

Get rid of pg_class.reltoastidxid.

Treat TOAST index just the same as normal one and get the OID
of TOAST index from pg_index but not pg_class.reltoastidxid.
This change allows us to handle multiple TOAST indexes, and
which is required infrastructure for upcoming
REINDEX CONCURRENTLY feature.

Patch by Michael Paquier, reviewed by Andres Freund and me.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/2ef085d0e6960f5087c97266a7211d37ddaa9f68

Modified Files
--------------
contrib/pg_upgrade/info.c | 15 ++-
doc/src/sgml/catalogs.sgml | 9 --
doc/src/sgml/diskusage.sgml | 26 ++--
doc/src/sgml/monitoring.sgml | 4 +-
src/backend/access/heap/tuptoaster.c | 225 +++++++++++++++++++++++++++-----
src/backend/catalog/heap.c | 1 -
src/backend/catalog/index.c | 23 +---
src/backend/catalog/system_views.sql | 10 +-
src/backend/commands/cluster.c | 34 +++--
src/backend/commands/tablecmds.c | 20 ++-
src/backend/rewrite/rewriteDefine.c | 5 +-
src/backend/utils/adt/dbsize.c | 24 +++-
src/bin/pg_dump/pg_dump.c | 14 +-
src/include/access/tuptoaster.h | 9 ++
src/include/catalog/catversion.h | 2 +-
src/include/catalog/pg_class.h | 44 +++----
src/test/regress/expected/oidjoins.out | 8 --
src/test/regress/expected/rules.out | 16 +--
src/test/regress/sql/oidjoins.sql | 4 -
src/test/regress/sql/rules.sql | 2 +-
src/tools/findoidjoins/README | 1 -
21 files changed, 333 insertions(+), 163 deletions(-)

--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

#2Andres Freund
andres@anarazel.de
In reply to: Fujii Masao (#1)
Re: pgsql: Get rid of pg_class.reltoastidxid.

Hi Fujii, Michael,

Coverity indicated that there's a problem with this - a quick look
confirms that:

foreach(lc, indexlist)
(*toastidxs)[i++] = index_open(lfirst_oid(lc), lock);

/* Fetch the first valid index in list */
for (i = 0; i < *num_indexes; i++)
{
Relation toastidx = *toastidxs[i];
if (toastidx->rd_index->indisvalid)
{
res = i;
found = true;
break;
}
}

Note how the second access to toastidxs is missing parentheses. It
should be (*toastidxs)[i].

I think this happens to mostly work because usually the older index will
still be valid when we open the toast indexes when there are multiple
ones and RelationGetIndexList() returns indexes in toast order.

Greetings,

Andres Freund

--
Andres Freund http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

#3Michael Paquier
michael@paquier.xyz
In reply to: Andres Freund (#2)
Re: pgsql: Get rid of pg_class.reltoastidxid.

On Wed, Jan 15, 2014 at 9:29 PM, Andres Freund <andres@2ndquadrant.com> wrote:

Hi Fujii, Michael,

Coverity indicated that there's a problem with this - a quick look
confirms that:

foreach(lc, indexlist)
(*toastidxs)[i++] = index_open(lfirst_oid(lc), lock);

/* Fetch the first valid index in list */
for (i = 0; i < *num_indexes; i++)
{
Relation toastidx = *toastidxs[i];
if (toastidx->rd_index->indisvalid)
{
res = i;
found = true;
break;
}
}

Note how the second access to toastidxs is missing parentheses. It
should be (*toastidxs)[i].

I think this happens to mostly work because usually the older index will
still be valid when we open the toast indexes when there are multiple
ones and RelationGetIndexList() returns indexes in toast order.

Oops, good catch. If someone could show up and commit the attached to
master and REL9_3_STABLE...
Regards,
--
Michael

--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

#4Robert Haas
robertmhaas@gmail.com
In reply to: Michael Paquier (#3)
Re: pgsql: Get rid of pg_class.reltoastidxid.

On Wed, Jan 15, 2014 at 7:54 AM, Michael Paquier
<michael.paquier@gmail.com> wrote:

Oops, good catch. If someone could show up and commit the attached to
master and REL9_3_STABLE...

Hmm, I don't see an attachment.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

#5Michael Paquier
michael@paquier.xyz
In reply to: Robert Haas (#4)
Re: pgsql: Get rid of pg_class.reltoastidxid.

On Wed, Jan 15, 2014 at 10:02 PM, Robert Haas <robertmhaas@gmail.com> wrote:

On Wed, Jan 15, 2014 at 7:54 AM, Michael Paquier
<michael.paquier@gmail.com> wrote:

Oops, good catch. If someone could show up and commit the attached to
master and REL9_3_STABLE...

Hmm, I don't see an attachment.

Re-oops. Sorry I forgot it.
--
Michael

Attachments:

20140110_tuptoaster_fix.patchtext/x-patch; charset=US-ASCII; name=20140110_tuptoaster_fix.patchDownload+1-1
#6Robert Haas
robertmhaas@gmail.com
In reply to: Michael Paquier (#5)
Re: pgsql: Get rid of pg_class.reltoastidxid.

On Wed, Jan 15, 2014 at 8:14 AM, Michael Paquier
<michael.paquier@gmail.com> wrote:

On Wed, Jan 15, 2014 at 10:02 PM, Robert Haas <robertmhaas@gmail.com> wrote:

On Wed, Jan 15, 2014 at 7:54 AM, Michael Paquier
<michael.paquier@gmail.com> wrote:

Oops, good catch. If someone could show up and commit the attached to
master and REL9_3_STABLE...

Hmm, I don't see an attachment.

Re-oops. Sorry I forgot it.

Committed to master, but I don't think this code exists in REL9_3_STABLE.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers