Is this error expected ?

Started by Yavuz TANRIVERDİover 3 years ago4 messagesgeneral
Jump to latest
#1Yavuz TANRIVERDİ
sternix@gmail.com

Hi,

i have an

"ERROR: UNION types "char" and text cannot be matched CASE WHEN
indisprimary THEN"

error from

https://github.com/yiisoft/yii/blob/e7c298343bf1f76186d443b62ff853d2d36e19f0/framework/db/schema/pgsql/CPgsqlSchema.php#L233

I read release notes, but can't find any related change,

It works for PostgreSQL 14.5 but fails with PostgreSQL 15.0, a test
sample below.

Is this error expected ?

Thanks,

create table tbla
(
a "char"
);

create table tblb
(
b char(1)
);

insert into tbla values ('a');
insert into tbla values ('b');

insert into tblb values ('c');
insert into tblb values ('d');

-- works with 14.5 fails on 15.0

select a from tbla
union all
select
case when true then
'p'
else
'u'
end from tblb;

#2Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Yavuz TANRIVERDİ (#1)
Re: Is this error expected ?

On Wed, 2022-10-19 at 09:50 +0300, Yavuz TANRIVERDİ wrote:

i have an
"ERROR: UNION types "char" and text cannot be matched CASE WHEN indisprimary THEN"
error from
https://github.com/yiisoft/yii/blob/e7c298343bf1f76186d443b62ff853d2d36e19f0/framework/db/schema/pgsql/CPgsqlSchema.php#L233
I read release notes, but can't find any related change,
It works for PostgreSQL 14.5 but fails with PostgreSQL 15.0, a test sample below.
Is this error expected ?

Yes, it is. See this paragraph from the release notes
(https://www.postgresql.org/docs/current/release-15.html#id-1.11.6.5.5.13):

- Create a new pg_type.typcategory value for "char" (Tom Lane)
Some other internal-use-only types have also been assigned to this category.

Perhaps that should have been listed as a potential compatibility break, but
the documentation explicity says that "char" is not intended for use by the
end user (https://www.postgresql.org/docs/current/datatype-character.html):

These are not intended for general-purpose use, only for use in the internal system catalogs.

You will have to add an explicit type cast.

Yours,
Laurenz Albe

#3Yavuz TANRIVERDİ
sternix@gmail.com
In reply to: Laurenz Albe (#2)
Re: Is this error expected ?

Ok, thank you very much,

On Wed, Oct 19, 2022 at 10:15 AM Laurenz Albe <laurenz.albe@cybertec.at>
wrote:

Show quoted text

On Wed, 2022-10-19 at 09:50 +0300, Yavuz TANRIVERDİ wrote:

i have an
"ERROR: UNION types "char" and text cannot be matched CASE WHEN

indisprimary THEN"

error from

https://github.com/yiisoft/yii/blob/e7c298343bf1f76186d443b62ff853d2d36e19f0/framework/db/schema/pgsql/CPgsqlSchema.php#L233

I read release notes, but can't find any related change,
It works for PostgreSQL 14.5 but fails with PostgreSQL 15.0, a test

sample below.

Is this error expected ?

Yes, it is. See this paragraph from the release notes
(https://www.postgresql.org/docs/current/release-15.html#id-1.11.6.5.5.13
):

- Create a new pg_type.typcategory value for "char" (Tom Lane)
Some other internal-use-only types have also been assigned to this
category.

Perhaps that should have been listed as a potential compatibility break,
but
the documentation explicity says that "char" is not intended for use by the
end user (https://www.postgresql.org/docs/current/datatype-character.html
):

These are not intended for general-purpose use, only for use in the

internal system catalogs.

You will have to add an explicit type cast.

Yours,
Laurenz Albe

#4Ron
ronljohnsonjr@gmail.com
In reply to: Yavuz TANRIVERDİ (#1)
Re: Is this error expected ?

On 10/19/22 01:50, Yavuz TANRIVERDİ wrote:

|Hi,|
|i have an |
|
|"ERROR: UNION types "char" and text cannot be matched CASE WHEN
indisprimary THEN"||
|error from |
|https://github.com/yiisoft/yii/blob/e7c298343bf1f76186d443b62ff853d2d36e19f0/framework/db/schema/pgsql/CPgsqlSchema.php#L233|
|I read release notes, but can't find any related change,|
|It works for PostgreSQL 14.5 but fails with PostgreSQL ||15.0, ||a test sample below.|
Is this error expected ?
Thanks,
|create table tbla ( a "char" ); |

Try CHAR(1) instead of just CHAR.

|create table tblb ( b char(1) ); insert into tbla values ('a'); insert
into tbla values ('b'); insert into tblb values ('c'); insert into tblb
values ('d'); -- works with 14.5 fails on 15.0|
|select a from tbla union all select case when true then 'p' else 'u' end
from tblb; |

--
Angular momentum makes the world go 'round.