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: | Raw Message | Whole Thread | 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.
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 |
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 |