Unnecessary casts in pg_cast

Started by Bruce Momjianover 18 years ago2 messageshackers
Jump to latest
#1Bruce Momjian
bruce@momjian.us

postgres=# select *,(select typname from pg_type where oid = castsource) as source,(select typname from pg_type where oid = casttarget) as target from pg_cast where castsource = 25 or casttarget = 25;
castsource | casttarget | castfunc | castcontext | source | target
------------+------------+----------+-------------+---------+----------
25 | 2205 | 1079 | i | text | regclass
25 | 1042 | 0 | i | text | bpchar
25 | 1043 | 0 | i | text | varchar
1042 | 25 | 401 | i | bpchar | text
1043 | 25 | 0 | i | varchar | text
18 | 25 | 946 | i | char | text
19 | 25 | 406 | i | name | text
25 | 18 | 944 | a | text | char
25 | 19 | 407 | i | text | name
650 | 25 | 730 | a | cidr | text
869 | 25 | 730 | a | inet | text
16 | 25 | 2971 | a | bool | text
142 | 25 | 2922 | a | xml | text
25 | 142 | 2896 | e | text | xml
(14 rows)

Why do we need assignment casts from cidr, inet, bool, and xml to text? These
all seem redundant since there's effectively an assignment cast from every
data type to text anyways:

postgres=# delete from pg_cast where casttarget = 25;
DELETE 8

postgres=# insert into t values ('1.0.0.0'::cidr);
INSERT 0 1

postgres=# select * from t;
t
------------
1.0.0.0/32
(1 row)

postgres=# \d t
Table "public.t"
Column | Type | Modifiers
--------+------+-----------
t | text |

--
Gregory Stark
EnterpriseDB http://www.enterprisedb.com
Ask me about EnterpriseDB's Slony Replication support!

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#1)
Re: Unnecessary casts in pg_cast

Gregory Stark <stark@enterprisedb.com> writes:

Why do we need assignment casts from cidr, inet, bool, and xml to
text?

Because these cast conversion functions act differently from the datatype
output functions, eg

regression=# select true;
bool
------
t
(1 row)

regression=# select true::text;
text
------
true
(1 row)

regards, tom lane