Re: [SQL] char(19) to varchar(32)

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Marc Tardif <admin(at)wtbwts(dot)com>
Cc: Jose Soares <jose(at)sferacarta(dot)com>, pgsql-sql(at)postgreSQL(dot)org
Subject: Re: [SQL] char(19) to varchar(32)
Date: 2000-01-19 17:24:33
Message-ID: 10207.948302673@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Marc Tardif <admin(at)wtbwts(dot)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

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Marten Feldtmann 2000-01-19 17:46:26 Re: [SQL] index usage ... strange !?
Previous Message Bruce Momjian 2000-01-19 17:07:15 Re: [GENERAL] Re: [SQL] Bug in CEIL?