Change on-disk representation of NUMERIC datatype so that the sign_dscale
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 25 Sep 2007 22:21:55 +0000 (22:21 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 25 Sep 2007 22:21:55 +0000 (22:21 +0000)
word comes before the weight instead of after.  This will allow future
binary-compatible extension of the representation to support compact formats,
as discussed on pgsql-hackers around 2007/06/18.  The reason to do it now is
that we've already pretty well broken any chance of simple in-place upgrade
from 8.2 to 8.3, but it's possible that 8.3 to 8.4 (or whenever we get around
to squeezing NUMERIC) could otherwise be data-compatible.

src/include/catalog/catversion.h
src/include/utils/numeric.h

index 31421abb94768169b5522439964bed1826bd757c..3a897c72bb468f55dc4e8110085cc923ee953982 100644 (file)
@@ -53,6 +53,6 @@
  */
 
 /*                                                     yyyymmddN */
-#define CATALOG_VERSION_NO     200709241
+#define CATALOG_VERSION_NO     200709251
 
 #endif
index 3e02c40b163462100de4bef0537107b7f84846e7..589e2f5bda3a9418a1e54593f032a6af3fdd6998 100644 (file)
 typedef struct NumericData
 {
        int32           vl_len_;                /* varlena header (do not touch directly!) */
-       int16           n_weight;               /* Weight of 1st digit  */
        uint16          n_sign_dscale;  /* Sign + display scale */
+       int16           n_weight;               /* Weight of 1st digit  */
        char            n_data[1];              /* Digits (really array of NumericDigit) */
 } NumericData;
 
 typedef NumericData *Numeric;
 
-#define NUMERIC_HDRSZ  (VARHDRSZ + sizeof(int16) + sizeof(uint16))
+#define NUMERIC_HDRSZ  (VARHDRSZ + sizeof(uint16) + sizeof(int16))
 
 
 /*