sql >> Base de Datos >  >> RDS >> PostgreSQL

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

Su fuente no es de ninguna manera oficial. Data de 2011 y ni siquiera reconozco a los autores. Si el tipo de dinero fuera oficialmente "desaconsejado", PostgreSQL lo diría en el manual, lo cual no es así.

Para una fuente más oficial , lea este hilo en pgsql-general (¡solo de esta semana!), con declaraciones de desarrolladores principales, incluidos D'Arcy J.M. Cain (autor original del tipo de dinero) y Tom Lane:

Respuesta relacionada (¡y comentarios!) sobre mejoras en versiones recientes:

  • Informe de Jasper:no se pudo obtener el valor del campo 'x' de la clase 'org.postgresql.util.PGmoney'

Básicamente, money tiene sus usos (muy limitados). Postgres Wiki sugiere evitarlo en gran medida, excepto en aquellos casos estrictamente definidos. La ventaja sobre numeric es rendimiento .

decimal es solo un alias para numeric en Postgres, y muy utilizado para datos monetarios, siendo un tipo de "precisión arbitraria". El manual:

El tipo numeric puede almacenar números con una gran cantidad de dígitos. Está especialmente recomendado para almacenar cantidades monetarias y otras cantidades donde se requiere exactitud.

Personalmente, me gusta almacenar la moneda como integer representando centavos si nunca ocurren centavos fraccionarios (básicamente donde el dinero tiene sentido). Eso es más eficiente que cualquier otra de las opciones mencionadas.