tipos tabla funciona ejemplos desde datos crear convertir como comandos cero aprender sql database postgresql postgresql-9.1 postgresql-9.2

tabla - PostgreSQL: ¿Qué tipo de datos se debe usar para la moneda?



tipos de datos en postgresql pdf (4)

Parece que se desaconseja el tipo de Money como se describe here

Mi aplicación necesita almacenar moneda, ¿qué tipo de datos debo usar? Numérico, dinero o FLOTACIÓN?


Mantengo todos mis campos monetarios como:

numeric(15,6)

Parece excesivo tener tantos decimales, pero si existe la más mínima posibilidad de lidiar con monedas múltiples, necesitará mucha precisión para la conversión. No importa lo que le presente a un usuario, siempre almaceno en dólares estadounidenses. De esa manera, puedo convertir fácilmente a cualquier otra moneda, dada la tasa de conversión del día involucrado.

Si nunca haces otra cosa que una moneda, lo peor aquí es que desperdiciaste un poco de espacio para almacenar algunos ceros.


Tu fuente no es de ninguna manera oficial. Data de 2011 y ni siquiera reconozco a los autores. Si el tipo de dinero era "desaconsejable", PostgreSQL lo diría en el manual, y no es así .

Para obtener una fuente más oficial , lea este hilo en pgsql-general (¡desde esta semana!) , Con declaraciones de los principales desarrolladores, como D''Arcy JM Cain (autor original del tipo de dinero) y Tom Lane:

Básicamente, el money tiene sus usos (limitados). La ventaja sobre el numeric es el rendimiento .

decimal es solo un alias para numeric en Postgres.

Respuesta relacionada (y comentarios!) Sobre mejoras en lanzamientos recientes:

Personalmente, me gusta almacenar moneda como un integer representa Centavos. Eso es más eficiente que cualquier otra de las opciones mencionadas.


Tus elecciones son:

  1. integer : almacenar la cantidad en centavos. Esto es lo que utilizan las transacciones EFTPOS.
  2. decimal(12,2) : almacene la cantidad con exactamente dos decimales. Esto es lo que usa el software de libro mayor.
  3. float : idea terrible: precisión inadecuada. Esto es lo que usan los desarrolladores ingenuos.

La opción 2 es la más común y más fácil de trabajar. Haga la precisión (12 en mi ejemplo, es decir, 12 dígitos en total) tan grande o pequeña como le sea mejor.

Tenga en cuenta que si agrega varias transacciones que fueron el resultado de un cálculo (por ejemplo, que implica un tipo de cambio) en un único valor que tiene significado comercial, la precisión debe ser mayor para proporcionar un valor macro preciso; Considere usar algo como decimal(18, 8) para que la suma sea precisa y los valores individuales se puedan redondear a precisión de ciento para mostrar.


Numeric con precisión forzada de 2 unidades. Nunca use float o float como datatype para representar la moneda, porque si lo hace, la gente no estará contenta cuando la cifra final del informe financiero sea incorrecta por + o - unos pocos dólares.

Por lo que puedo ver, el tipo de dinero se deja por razones históricas.