diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2009-12-29 22:00:14 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2009-12-29 22:00:14 +0000 |
commit | 540e69a0613bad2b6ad15b237a8df27110f4b213 (patch) | |
tree | 13931f0f72e5b4008eeb823aa7301039684b3d85 /src/backend/commands/tablecmds.c | |
parent | 649b5ec7c8a3050a30bd6d36003ba3a681c9a198 (diff) | |
download | postgresql-540e69a0613bad2b6ad15b237a8df27110f4b213.tar.gz postgresql-540e69a0613bad2b6ad15b237a8df27110f4b213.zip |
Add an index on pg_inherits.inhparent, and use it to avoid seqscans in
find_inheritance_children(). This is a complete no-op in databases without
any inheritance. In databases where there are just a few entries in
pg_inherits, it could conceivably be a small loss. However, in databases with
many inheritance parents, it can be a big win.
Diffstat (limited to 'src/backend/commands/tablecmds.c')
-rw-r--r-- | src/backend/commands/tablecmds.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 55954738088..0412aaf73f2 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.311 2009/12/23 16:43:43 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.312 2009/12/29 22:00:12 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1793,8 +1793,8 @@ StoreCatalogInheritance1(Oid relationId, Oid parentOid, int16 seqNumber, Relation inhRelation) { TupleDesc desc = RelationGetDescr(inhRelation); - Datum datum[Natts_pg_inherits]; - bool nullarr[Natts_pg_inherits]; + Datum values[Natts_pg_inherits]; + bool nulls[Natts_pg_inherits]; ObjectAddress childobject, parentobject; HeapTuple tuple; @@ -1802,15 +1802,13 @@ StoreCatalogInheritance1(Oid relationId, Oid parentOid, /* * Make the pg_inherits entry */ - datum[0] = ObjectIdGetDatum(relationId); /* inhrelid */ - datum[1] = ObjectIdGetDatum(parentOid); /* inhparent */ - datum[2] = Int16GetDatum(seqNumber); /* inhseqno */ + values[Anum_pg_inherits_inhrelid - 1] = ObjectIdGetDatum(relationId); + values[Anum_pg_inherits_inhparent - 1] = ObjectIdGetDatum(parentOid); + values[Anum_pg_inherits_inhseqno - 1] = Int16GetDatum(seqNumber); - nullarr[0] = false; - nullarr[1] = false; - nullarr[2] = false; + memset(nulls, 0, sizeof(nulls)); - tuple = heap_form_tuple(desc, datum, nullarr); + tuple = heap_form_tuple(desc, values, nulls); simple_heap_insert(inhRelation, tuple); |