]> granicus.if.org Git - postgresql/commitdiff
Hi all,
authorBruce Momjian <bruce@momjian.us>
Fri, 28 Aug 1998 03:36:31 +0000 (03:36 +0000)
committerBruce Momjian <bruce@momjian.us>
Fri, 28 Aug 1998 03:36:31 +0000 (03:36 +0000)
    I  don't know if this is really related to the initdb problem
    discussion (haven't followed it enough). But seems so because
    it  fixes  a  damn  problem  during  index tuple insertion on
    CREATE TABLE into pg_attribute_relid_attnum_index.

    Anyway - this bug was really hard to find. During startup the
    relcache  reads  in  some  prepared  information  about index
    strategies from a file and then  reinitializes  the  function
    pointers  inside  the  scanKey data.  But for sake it assumed
    single attribute index tuples (hasn't that changed recently).
    Thus not all the strategies scanKey entries where initialized
    properly,  resulting  in  invalid  addresses  for  the  btree
    comparision functions.

    With  the  patch  at  the  end  the  regression  tests passed
    excellent except for the sanity_check that crashed at  vacuum
    and the misc test where the select unique1 from onek2 outputs
    the two rows in different order.

Jan

src/backend/catalog/index.c
src/backend/commands/vacuum.c
src/backend/utils/cache/relcache.c
src/bin/psql/psqlHelp.h

index 6394186722442cc0bac4153dfa4477e2e44bc5ea..a14a41b9df5f7d0d9367362cd018ad53ed63c0b2 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.55 1998/08/26 17:12:09 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.56 1998/08/28 03:36:25 momjian Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -1267,7 +1267,6 @@ FormIndexDatum(int numberOfAttributes,
                           FuncIndexInfoPtr fInfo)
 {
        AttrNumber      i;
-       int                     offset;
        bool            isNull;
 
        /* ----------------
@@ -1277,19 +1276,16 @@ FormIndexDatum(int numberOfAttributes,
         * ----------------
         */
 
-       for (i = 1; i <= numberOfAttributes; i++)
+       for (i = 0; i < numberOfAttributes; i++)
        {
-               offset = AttrNumberGetAttrOffset(i);
-
-               datum[offset] =
-                       PointerGetDatum(GetIndexValue(heapTuple,
-                                                                                 heapDescriptor,
-                                                                                 offset,
-                                                                                 attributeNumber,
-                                                                                 fInfo,
-                                                                                 &isNull));
-
-               nullv[offset] = (isNull) ? 'n' : ' ';
+               datum[i] =      PointerGetDatum(GetIndexValue(heapTuple,
+                                                                         heapDescriptor,
+                                                                         i,
+                                                                         attributeNumber,
+                                                                         fInfo,
+                                                                         &isNull));
+
+               nullv[i] = (isNull) ? 'n' : ' ';
        }
 }
 
index bd92c1368eff50b28f9226b13cdf761b1e846a27..bd5471feebb1a5b051f41ce876ed48cdb5864f58 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.76 1998/08/20 22:07:39 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.77 1998/08/28 03:36:26 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1143,16 +1143,14 @@ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)",
                        {
                                for (i = 0, idcur = Idesc; i < nindices; i++, idcur++)
                                {
-                                       FormIndexDatum(
-                                                                  idcur->natts,
-                                                          (AttrNumber *) &(idcur->tform->indkey[0]),
+                                       FormIndexDatum(idcur->natts,
+                                                                  (AttrNumber *) &(idcur->tform->indkey[0]),
                                                                   newtup,
                                                                   tupdesc,
                                                                   idatum,
                                                                   inulls,
                                                                   idcur->finfoP);
-                                       iresult = index_insert(
-                                                                                  Irel[i],
+                                       iresult = index_insert(Irel[i],
                                                                                   idatum,
                                                                                   inulls,
                                                                                   &(newtup->t_ctid),
index 432c65fdf373d10ed5b705facdd89ed0cde4a066..5d30836a41f8de30b21f18e4a9a0bd49673e9559 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.47 1998/08/19 02:03:13 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.48 1998/08/28 03:36:28 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1982,10 +1982,11 @@ init_irels(void)
 #define SMD(i) strat[0].strategyMapData[i].entry[0]
 
                /* have to reinit the function pointers in the strategy maps */
-               for (i = 0; i < am->amstrategies; i++)
+               for (i = 0; i < am->amstrategies * relform->relnatts; i++) {
                        fmgr_info(SMD(i).sk_procedure,
                                          &(SMD(i).sk_func));
-               SMD(i).sk_nargs = SMD(i).sk_func.fn_nargs;
+                       SMD(i).sk_nargs = SMD(i).sk_func.fn_nargs;
+               }
 
 
                /*
index 387561cbd9f64bd311fca668a323aeb1fd1337dc..b806064138929481cdd2129a5b5a7c7607410f0e 100644 (file)
@@ -5,7 +5,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: psqlHelp.h,v 1.50 1998/08/25 21:36:58 scrappy Exp $
+ * $Id: psqlHelp.h,v 1.51 1998/08/28 03:36:31 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -353,7 +353,7 @@ set R_PLANS TO 'ON'| 'OFF'"},
                "update tuples",
        "\
 \tUPDATE class_name SET attr1 = expr1, ...attrN = exprN\n\
-\t [FROM from_clause]\n\
+\t[FROM from_clause]\n\
 \t[WHERE qual];"},
        {"vacuum",
                "vacuum the database, i.e. cleans out deleted records, updates statistics",