Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
Thread:
Lists: pgsql-generalpgsql-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

pgsql-hackers by date

Next:From: Bruce MomjianDate: 2005-08-28 17:18:31
Subject: Re: Win32 Thread safetyness
Previous:From: Tom LaneDate: 2005-08-28 16:33:09
Subject: Re: small pg_dumpall bug/warning in 8.1beta1

pgsql-general by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group