Todos los productos
Search
Centro de documentos

AnalyticDB:fixnumeric

Última actualización: Sep 04, 2026

FIXNUMERIC es un tipo de datos decimal de precisión fija para AnalyticDB for PostgreSQL que almacena valores decimales como enteros nativos (INT64 o INT128) con una escala predefinida. Al mapear los decimales a enteros, FIXNUMERIC evita la sobrecarga de la aritmética de precisión variable y la pérdida de precisión causada por errores de representación binaria en cálculos de punto flotante. En cargas de trabajo intensivas en cómputo, como agregaciones a gran escala y cálculos financieros, FIXNUMERIC supera significativamente en rendimiento a los tipos nativos NUMERIC y DECIMAL.

Cuándo usar FIXNUMERIC

Utilice FIXNUMERIC cuando su carga de trabajo requiera todos los siguientes elementos:

  • Valores decimales exactos: cálculos financieros, libros contables, facturación o informes de cumplimiento donde los errores de redondeo son inaceptables.

  • Alto rendimiento de consultas: agregaciones a gran escala con SUM, AVG u otras funciones sobre columnas numéricas.

  • Rangos de datos predecibles: valores que se ajustan al rango de enteros de 64 bits o 128 bits.

Mantenga el tipo NUMERIC si necesita:

  • Compatibilidad con NaN: FIXNUMERIC no admite valores NaN.

  • Rango ilimitado: valores que exceden los límites fijos de enteros de 64 bits o 128 bits.

  • Escala variable: columnas donde el número de lugares decimales difiere entre filas.

Funcionamiento de FIXNUMERIC

FIXNUMERIC mapea cada valor decimal a un entero mediante la multiplicación por una potencia de 10 igual a la escala predefinida; posteriormente, almacena el resultado en un registro de enteros nativo. Por ejemplo, 3.141592 con escala 6 se almacena como el entero 3141592. Las operaciones aritméticas se ejecutan directamente sobre estos enteros mediante conjuntos de instrucciones nativas de la CPU. Por esta razón, las consultas de agregación sobre columnas FIXNUMERIC son sustancialmente más rápidas que las consultas equivalentes sobre columnas NUMERIC.

FIXNUMERIC tiene dos variantes. Elija la adecuada según la precisión y el rango que requieran sus datos:

Variante

Almacenamiento

Precisión

Tipo equivalente

Recomendado para

FIXNUMERIC

Entero de 64 bits (INT64)

Hasta 19 dígitos, 6 lugares decimales

NUMERIC(19,6)

Cálculos a pequeña y mediana escala

FIXNUMERIC128

Entero de 128 bits (INT128)

Hasta 38 dígitos, 10 lugares decimales

NUMERIC(38,10)

Análisis de alto rango y alta precisión

Se recomienda preferir FIXNUMERIC en lugar de FIXNUMERIC128 , a menos que sus valores requieran más de 19 dígitos significativos o más de 6 lugares decimales.

Comparación con NUMERIC

Función

**FIXNUMERIC / FIXNUMERIC128**

**NUMERIC**

Precisión

Fija (6 o 10 lugares decimales de forma predeterminada)

Variable

Rango

Limitado (basado en enteros de 64 bits o 128 bits)

Casi ilimitado

Rendimiento

Alto (mediante operaciones basadas en conjuntos de instrucciones nativas de la CPU)

Bajo

Método de redondeo

Redondeo hacia cero

Redondeo al más cercano

Compatibilidad con NaN

No compatible

Compatible

Conversión de tipos en operaciones aritméticas

Algunas funciones convierten los valores FIXNUMERIC a DOUBLE antes de calcular un resultado. Esto aplica a round, sqrt, exp, ln, pow, power, log y log10. El resultado de estas funciones es un valor de punto flotante, no un FIXNUMERIC. Para operaciones que deben devolver resultados decimales exactos, utilice trunc, abs, ceil, floor o los operadores aritméticos estándar.

Limitaciones

  • Solo las instancias de AnalyticDB for PostgreSQL V7.0 que ejecutan la versión V7.2.1.1 o posterior son compatibles con la extensión fixnumeric. Para comprobar su versión menor, consulte View the minor version of an instance. Para actualizar, consulte UpgradeDBVersion.

  • Las instancias en modo Serverless no admiten la extensión fixnumeric.

  • FIXNUMERIC y FIXNUMERIC128 tienen rangos de valores fijos. Insertar un valor que exceda el rango provoca un error de desbordamiento.

  • La escala es fija a nivel de tipo, no a nivel de columna. No se especifica la escala al crear una columna; la escala está predefinida en 6 para FIXNUMERIC y en 10 para FIXNUMERIC128.

Instalación de la extensión

La extensión fixnumeric no admite instalación mediante interfaz gráfica. Para instalarla, submit a ticket. Después de la instalación, reinicie su instancia de AnalyticDB for PostgreSQL. Para desinstalar la extensión, envíe un ticket.

Uso de FIXNUMERIC en consultas

FIXNUMERIC funciona como cualquier otro tipo de datos numérico y puede reemplazar columnas FLOAT o DOUBLE PRECISION que requieren valores exactos.

Paso 1: Crear una tabla e insertar datos

Cree una tabla con columnas FIXNUMERIC y FIXNUMERIC128 junto con columnas FLOAT y NUMERIC para comparar su comportamiento:

CREATE TABLE test_t(a float, b numeric(14,6), c fixnumeric, d fixnumeric128);
INSERT INTO test_t SELECT v+0.1,v+0.1,v+0.1,v+0.1 FROM generate_series(1,1000) v;

Paso 2: Crear índices

FIXNUMERIC admite índices. Cree índices en las columnas FIXNUMERIC:

CREATE INDEX ON test_t (c);
CREATE INDEX ON test_t (d);

Paso 3: Ejecutar consultas de agregación

Consulte la suma (SUM) de cada columna. La columna FLOAT devuelve un valor aproximado debido a errores de representación binaria, mientras que NUMERIC, FIXNUMERIC y FIXNUMERIC128 devuelven valores exactos:

SELECT SUM(a), SUM(b), SUM(c), SUM(d) FROM test_t;
sum         |      sum      |        sum        |        sum
--------------------+---------------+-------------------+-------------------
 500600.00000000175 | 500600.000000 | 500600.0000000000 | 500600.0000000000
(1 row)

Consulte el promedio (AVG) de cada columna. Se observa la misma diferencia de precisión:

SELECT AVG(a), AVG(b), AVG(c), AVG(d) FROM test_t;
avg        |         avg          |    avg     |      avg
-------------------+----------------------+------------+----------------
 500.6000000000017 | 500.6000000000000000 | 500.600000 | 500.6000000000
(1 row)

Funciones compatibles

FIXNUMERIC es compatible con la mayoría de las funciones que admiten tipos NUMERIC o DECIMAL, incluidas todas las funciones de agregación. Las funciones que devuelven un resultado de punto flotante están marcadas con un asterisco.

Función

Descripción

sum, avg, min, max

Calcula la suma, el promedio, el valor mínimo o el valor máximo

in_range

Comprueba si un valor cae dentro de un rango

abs

Devuelve un valor absoluto

sign

Devuelve el signo de un valor: -1, 0 o +1

trunc

Trunca un número a una cantidad específica de lugares decimales

ceil

Redondea hacia arriba al entero más cercano

ceiling

Alias de ceil

floor

Redondea hacia abajo al entero más cercano

mod

Devuelve el resto de una división

scale

Devuelve el número de lugares decimales

add, sub, mul, div

Suma, resta, multiplicación y división

=, >, <, <=, >=, <>

Operadores de comparación

round*

Redondea al entero más cercano; devuelve DOUBLE

sqrt*

Devuelve la raíz cuadrada; devuelve DOUBLE

exp*

Devuelve el exponente natural; devuelve DOUBLE

ln*

Devuelve el logaritmo natural; devuelve DOUBLE

pow*

Eleva a una potencia; devuelve DOUBLE

power*

Alias de pow; devuelve DOUBLE

log*

Operación logarítmica; devuelve DOUBLE

log10*

Logaritmo base 10; devuelve DOUBLE

to_char

Convierte a cadena; FIXNUMERIC se convierte primero a NUMERIC

*Estas funciones convierten FIXNUMERIC a DOUBLE antes de realizar el cálculo. El resultado es un valor de punto flotante.