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