Re: [SQL] char(19) to varchar(32) - Mailing list pgsql-sql

From Tom Lane
Subject Re: [SQL] char(19) to varchar(32)
Date
Msg-id 10207.948302673@sss.pgh.pa.us
Whole thread Raw
In response to Re: [SQL] char(19) to varchar(32)  (Marc Tardif <admin@wtbwts.com>)
Responses Re: [SQL] char(19) to varchar(32)  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-sql
Marc Tardif <admin@wtbwts.com> writes:
> Actually, here's my complete rule and error message:
> CREATE RULE prod_company AS ON UPDATE
>   TO company_base WHERE OLD.company <> NEW.company
>   DO UPDATE prod_base set company = NEW.company
>     WHERE prod_base.cid = OLD.oid;
> ERROR:  Type of 'company' does not match target column 'company'
>
> company in prod_base is char(19);
> company in company_baase is varchar(32);

Interesting.  You can get the same error from just doing the UPDATE
by hand --- so it's not got anything to do with the rule environment:

create table prod_base (company  char(19));
create table company_base (company  varchar(32));
update prod_base set company =  company_base.company;
ERROR:  Type of 'company' does not match target column 'company'

but
update prod_base set company =  company_base.company::char;
is accepted.  Even more interesting, so is
update prod_base set company =  company_base.company::text;

so it's not simply a matter of UPDATE missing automatic coercion
support; it's willing to do a coercion if you hand it an expression,
but seemingly not if you hand it a simple field reference.

This sure looks like a bug to me... I recommend a CAST as a workaround
for now, but I'll try to fix it for 7.0.
        regards, tom lane


pgsql-sql by date:

Previous
From: Sevo Stille
Date:
Subject: (no subject)
Next
From: Marten Feldtmann
Date:
Subject: Re: [SQL] index usage ... strange !?