Numeric data types
Informix®
Informix supports several data types to store numbers:
| Informix data type | Description |
|---|---|
SMALLINT |
16 bit signed integer |
INTEGER |
32 bit signed integer |
BIGINT |
64 bit signed integer |
INT8 |
64 bit signed integer (replaced by
BIGINT) |
DECIMAL |
Equivalent to DECIMAL(16) |
DECIMAL(p) |
Floating-point decimal number (max precision is 32) |
DECIMAL(p,s) |
Fixed-point decimal number (max precision is 32) |
MONEY |
Equivalent to DECIMAL(16,2) |
MONEY(p) |
Equivalent to DECIMAL(p,2) (max precision is
32) |
MONEY(p,s) |
Equivalent to DECIMAL(p,s) (max precision is
32) |
REAL / SMALLFLOAT |
32-bit floating point decimal (C float) |
DOUBLE PRECISION / FLOAT[(n)] |
64-bit floating point decimal (C double) |
PostgreSQL
PostgreSQL supports the following data types to store numbers:
| PostgreSQL data type | Description |
|---|---|
INT2 / SMALLINT |
16 bit signed integer |
INT4 / INTEGER |
32 bit signed integer |
INT8 / BIGINT |
64 bit signed integer |
DECIMAL(p,s) |
Decimals with precision and scale (fractional part) |
DECIMAL(p) |
Integers with p digits (no fractional part) |
DECIMAL |
Floating point numbers (no limit) |
FLOAT4 |
16 bit variable precision |
FLOAT8 |
32 bit variable precision |
ANSI types like SMALLINT, INTEGER, FLOAT are
supported by PostgreSQL as aliases to INT2, INT4 and
FLOAT8 native types.
Informix DECIMAL(p) floating point
types are converted to DECIMAL without precision/scale, to store any floating point
number in PostgreSQL.
Solution
Use the following conversion rules to map Informix numeric types to PostgreSQL numeric types:
| Informix data type | PostgreSQL data type |
|---|---|
SMALLINT |
INT2 |
INTEGER |
INT4 |
INT8 / BIGINT |
INT8 |
DECIMAL(p,s) |
DECIMAL(p,s) |
DECIMAL(p) |
DECIMAL |
DECIMAL |
DECIMAL |
MONEY(p,s) |
DECIMAL(p,s) |
MONEY(p) |
DECIMAL(p,2) |
MONEY |
DECIMAL(16,2) |
SMALLFLOAT |
FLOAT4 |
FLOAT[(n)] |
FLOAT8 |
The numeric types translation can be
controlled with the following FGLPROFILE
entries:
dbi.database.dsname.ifxemul.datatype.smallint = { true | false }
dbi.database.dsname.ifxemul.datatype.integer = { true | false }
dbi.database.dsname.ifxemul.datatype.bigint = { true | false }
dbi.database.dsname.ifxemul.datatype.int8 = { true | false }
dbi.database.dsname.ifxemul.datatype.decimal = { true | false }
dbi.database.dsname.ifxemul.datatype.money = { true | false }
dbi.database.dsname.ifxemul.datatype.float = { true | false }
dbi.database.dsname.ifxemul.datatype.smallfloat = { true | false }
For more details see IBM Informix emulation parameters in FGLPROFILE.