A real currency type

From: Martijn van Oosterhout <kleptog(at)svana(dot)org>
To: Postgresql General <pgsql-general(at)postgresql(dot)org>
Subject: A real currency type
Date: 2005-08-28 17:07:27
Message-ID: 20050828170727.GC12498@svana.org
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-hackers

For a while I've been wondering about making a type that was really a
shell around a base type that tagged the type in some way. For example,
associating a currency with a numeric and complaining about additions
between mismatches.

Well, I did it and it's available here:
http://svana.org/kleptog/pgsql/taggedtypes.html

Below some examples of it in action. Yes, that's a timestamp that
remembers the timezone. Neat huh?

Tested on 7.4 and a recent 8.1devel so it should work for most people.
Installation reports welcome. Note, this is beta software, don't run it
on your production server. Thanks.

Have a nice day,

test=# select '5.6 USD'::currency + '4.5 USD'::currency;;
?column?
-----------
10.10 USD
(1 row)

test=# select '5.6 USD'::currency + '4.5 AUD'::currency;;
ERROR: Using operator +(currency,currency) with incompatable tags (USD,AUD)
test=# select c1, print_currency(c1) from c;
c1 | print_currency
------------+----------------
232.44 USD | US$ 232.44
21.20 EUR | ¤ 21.20
-13.44 AUD | AU$ -13.44
0.01 USD | US$ 0.01
14.00 AUD | AU$ 14.00
(5 rows)

test=# select 5.4*c1 from c where tag(c1) = 'AUD';
?column?
------------
-72.58 AUD
75.60 AUD
(2 rows)

test=# select t, "timestamp"(t), date_part('hour',t) from c;
t | timestamp | date_part
-----------------------------------------+---------------------+-----------
2005-08-14 02:00:00+02 Europe/Amsterdam | 2005-08-14 02:00:00 | 2
2005-08-14 02:00:00+02 Australia/Sydney | 2005-08-14 10:00:00 | 10
2005-08-14 02:00:00+02 Asia/Hong_Kong | 2005-08-14 08:00:00 | 8
2005-08-14 02:00:00+02 America/New_York | 2005-08-13 20:00:00 | 20
2005-08-14 02:00:00+02 Asia/Kuwait | 2005-08-14 03:00:00 | 3
(5 rows)

--
Martijn van Oosterhout <kleptog(at)svana(dot)org> http://svana.org/kleptog/
> Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a
> tool for doing 5% of the work and then sitting around waiting for someone
> else to do the other 95% so you can sue them.

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Clodoaldo Pinto 2005-08-28 17:49:22 Re: Problem upgrading from 8.0.1 to 8.0.3
Previous Message Alvaro Herrera 2005-08-28 16:50:54 Re: Problem upgrading from 8.0.1 to 8.0.3

Browse pgsql-hackers by date

  From Date Subject
Next Message Bruce Momjian 2005-08-28 17:18:31 Re: Win32 Thread safetyness
Previous Message Tom Lane 2005-08-28 16:33:09 Re: small pg_dumpall bug/warning in 8.1beta1
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy