BUG #14176: Re: BUG #14173: Not using partitions with ANY(ARRAY[...])

Started by Gabriel Furstenheim Milerudalmost 10 years ago2 messagesbugs
Jump to latest
#1Gabriel Furstenheim Milerud
furstenheim@gmail.com

The following bug has been logged on the website:

Bug reference: 14176
Logged by: Gabriel f
Email address: furstenheim@gmail.com
PostgreSQL version: 9.5.3
Operating system: Linux 64bit
Description:

This is an answer to
/messages/by-id/12955.1464963775@sss.pgh.pa.us

If the type is an integer then I don't have the problem. However if I use
char(2) then I have it.

create table mtable (mvar char (2));
create table c1 (check (mvar = 'aa')) inherits(mtable);
create table c2 (check (mvar = 'bb')) inherits(mtable);
explain select * from mtable where mvar = 'aa';
'Append (cost=0.00..35.50 rows=11 width=12)'
' -> Seq Scan on mtable (cost=0.00..0.00 rows=1 width=12)'
' Filter: (mvar = 'aa'::bpchar)'
' -> Seq Scan on c1 (cost=0.00..35.50 rows=10 width=12)'
' Filter: (mvar = 'aa'::bpchar)'

explain select * from mtable where mvar = any (array['aa']);
'Append (cost=0.00..76.10 rows=21 width=12)'
' -> Seq Scan on mtable (cost=0.00..0.00 rows=1 width=12)'
' Filter: ((mvar)::text = ANY ('{aa}'::text[]))'
' -> Seq Scan on c1 (cost=0.00..38.05 rows=10 width=12)'
' Filter: ((mvar)::text = ANY ('{aa}'::text[]))'
' -> Seq Scan on c2 (cost=0.00..38.05 rows=10 width=12)'
' Filter: ((mvar)::text = ANY ('{aa}'::text[]))'

Curiously if I use char varying(2) then it works as expected

PS sorry I cannot find how to answer directly to the mail

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

#2Francisco Olarte
folarte@peoplecall.com
In reply to: Gabriel Furstenheim Milerud (#1)
Re: BUG #14176: Re: BUG #14173: Not using partitions with ANY(ARRAY[...])

Hi:

On Fri, Jun 3, 2016 at 6:14 PM, <furstenheim@gmail.com> wrote:

If the type is an integer then I don't have the problem. However if I use
char(2) then I have it.

char tends to do this things. Anyway....

.....

' Filter: ((mvar)::text = ANY ('{aa}'::text[]))'

Notice the ::text[]?

Curiously if I use char varying(2) then it works as expected

Maybe because text[] and varchar[] convert and text[] and char(2)[]
not, you could try to use explicit types ( array['aa'::char(2)] ).
I've seen this happen in other contexts when using char ( unqualified
strings are text, text does not convert that well to char the moment
there is something, like an array[], any() or other function calls,
in the middle ).

PS sorry I cannot find how to answer directly to the mail

There is alway cut&paste for these things.

Francisco Olarte.

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