no implicit cast error in 9.2?

Started by AI Rummanabout 13 years ago5 messagesgeneral
Jump to latest
#1AI Rumman
rummandba@gmail.com

Hi,

I am using
PostgreSQL 9.2.3 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.6
20120305 (Red Hat 4.4.6-4), 64-bit.

I got a bit confused after installing this version. So far I used to know
that from Postgresql 8.3 implicit casting has been removed and the
following should not work at 8.3 :
create table testtab ( id varchar, id1 int)
insert into testtab values (1,1);

Where it was good to work at 8.1

http://osdir.com/ml/pgsql-general/2011-02/msg00055.html

I also faced the problem earlier.

But in 9.2 it is working perfectly.
Am I missing any release notes?

Please share your opinion. It will be appreciated.

Thanks.

#2Adrian Klaver
adrian.klaver@aklaver.com
In reply to: AI Rumman (#1)
Re: no implicit cast error in 9.2?

On 02/08/2013 12:23 PM, AI Rumman wrote:

Hi,

I am using
PostgreSQL 9.2.3 on x86_64-unknown-linux-gnu, compiled by gcc (GCC)
4.4.6 20120305 (Red Hat 4.4.6-4), 64-bit.

I got a bit confused after installing this version. So far I used to
know that from Postgresql 8.3 implicit casting has been removed and the
following should not work at 8.3 :
create table testtab ( id varchar, id1 int)
insert into testtab values (1,1);

Where it was good to work at 8.1

http://osdir.com/ml/pgsql-general/2011-02/msg00055.html

I also faced the problem earlier.

But in 9.2 it is working perfectly.
Am I missing any release notes?

Please share your opinion. It will be appreciated.

As I remember implicit casting was not entirely removed and the
text <--> int combination was kept.

To extend your example, you can see it works both ways::

test=# create table testtab ( id varchar, id1 int);
CREATE TABLE
test=# insert into testtab values (1,1);
INSERT 0 1
test=# insert into testtab values (1,'1');
INSERT 0 1
test=# SELECT * from testtab ;
id | id1
----+-----
1 | 1
1 | 1
(2 rows)

Unless of course you use a non-integer string:

test=# insert into testtab values (1,'one');
ERROR: invalid input syntax for integer: "one"
LINE 1: insert into testtab values (1,'one');

Thanks.

--
Adrian Klaver
adrian.klaver@gmail.com

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#3Kevin Grittner
Kevin.Grittner@wicourts.gov
In reply to: Adrian Klaver (#2)
Re: no implicit cast error in 9.2?

Adrian Klaver <adrian.klaver@gmail.com> wrote:

On 02/08/2013 12:23 PM, AI Rumman wrote:

I got a bit confused after installing this version. So far I used to
know that from Postgresql 8.3 implicit casting has been removed and the
following should not work at 8.3 :
create table testtab ( id varchar, id1 int)
insert into testtab values (1,1);

Where it was good to work at 8.1

http://osdir.com/ml/pgsql-general/2011-02/msg00055.html

I also faced the problem earlier.

But in 9.2 it is working perfectly.
Am I missing any release notes?

Please share your opinion. It will be appreciated.

As I remember implicit casting was not entirely removed and the
text <--> int combination was kept.

I think it has more to do with retaining (or adding back, I don't
recall) *assignment* casts which aren't supported as *implicit*
casts.

test=# select '1'::int = '1'::text;
ERROR:  operator does not exist: integer = text
LINE 1: select '1'::int = '1'::text;
                        ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

-Kevin

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: AI Rumman (#1)
Re: no implicit cast error in 9.2?

AI Rumman <rummandba@gmail.com> writes:

I got a bit confused after installing this version. So far I used to know
that from Postgresql 8.3 implicit casting has been removed and the
following should not work at 8.3 :
create table testtab ( id varchar, id1 int)
insert into testtab values (1,1);

No, that will work fine in any version, because you're calling upon an
assignment cast not an implicit cast. What once worked and no longer
does is cases like

SELECT length(1);

where the integer argument used to be implicitly cast to text.

regards, tom lane

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#5Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Kevin Grittner (#3)
Re: no implicit cast error in 9.2?

On 02/08/2013 01:50 PM, Kevin Grittner wrote:

Adrian Klaver <adrian.klaver@gmail.com> wrote:

On 02/08/2013 12:23 PM, AI Rumman wrote:

I got a bit confused after installing this version. So far I used to
know that from Postgresql 8.3 implicit casting has been removed and the
following should not work at 8.3 :
create table testtab ( id varchar, id1 int)
insert into testtab values (1,1);

Where it was good to work at 8.1

http://osdir.com/ml/pgsql-general/2011-02/msg00055.html

I also faced the problem earlier.

But in 9.2 it is working perfectly.
Am I missing any release notes?

Please share your opinion. It will be appreciated.

As I remember implicit casting was not entirely removed and the
text <--> int combination was kept.

I think it has more to do with retaining (or adding back, I don't
recall) *assignment* casts which aren't supported as *implicit*
casts.

Ah, so that is the reason. A distinction I missed:(

--
Adrian Klaver
adrian.klaver@gmail.com

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general