Thread: Bug in PostGreSQL 8.2

Bug in PostGreSQL 8.2

From
Hubert FONGARNAND
Date:
I've seen this morning that PostGreSQL 8.2 was released!<br /><br /> I've updated my dev. server, and : this
SQLstatementfail :<br /><br /><pre>
 
select count(*) 
from NODE  
where NODE_ID 
in (select NODE_ID from NODE where NODE_TRASH=0  limit 1  offset 0)

</pre> with :<br /><br /> ERREUR: failed to find unique expression in subplan tlist<br /> État SQL :XX000<br /><br /> I
downgradeto PostGreSQL 8.1.5...<br /><br /> Thanks to fix this!<br /><br />
_______________________________________________<br/>Ce message et les �ventuels documents joints peuvent contenir des
informationsconfidentielles.<br />Au cas o� il ne vous serait pas destin�, nous vous remercions de bien vouloir le
supprimeret en aviser imm�diatement l'exp�diteur. Toute utilisation de ce message non conforme � sa destination, toute
diffusionou publication, totale ou partielle et quel qu'en soit le moyen est formellement interdite.<br />Les
communicationssur internet n'�tant pas s�curis�es, l'int�grit� de ce message n'est pas assur�e et la soci�t� �mettrice
nepeut �tre tenue pour responsable de son contenu. 

Re: Bug in PostGreSQL 8.2

From
Tom Lane
Date:
Hubert FONGARNAND <informatique.internet@fiducial.fr> writes:
> select count(*)=20
> from NODE =20
> where NODE_ID=20
> in (select NODE_ID from NODE where NODE_TRASH=3D0  limit 1  offset 0)
>  ERREUR: failed to find unique expression in subplan tlist

Please provide a *complete* example --- I am unable to reproduce this.
        regards, tom lane


Re: Bug in PostGreSQL 8.2

From
Hubert FONGARNAND
Date:
Complete example :<br /><br /> ./configure  --prefix=/opt/pg82--with-perl --with-python --with-tcl --enable-nls<br />
make<br/> make install<br /><br /> /opt/pg82/bin/initdb -D /var/lib/postgresql/data82/ --locale=fr_FR.utf8 -W<br />
/opt/pg82/bin/pg_ctl-D /var/lib/postgresql/data82 -l journaltrace start<br /><br /> and with pgadmin 3<br /><br
/><pre>
CREATE TABLE node
(
  node_id character varying(36) NOT NULL ,
  node_trash integer NOT NULL DEFAULT 0,
  CONSTRAINT pk_node PRIMARY KEY (node_id)
) 
WITH OIDS;

select count(*) 
from NODE  
where NODE_ID 
in (select NODE_ID from NODE where NODE_TRASH=0  limit 1  offset 0)
</pre><br /> and <br /><br /> ERREUR: failed to find unique expression in subplan tlist<br /> État SQL :XX000<br /><br
/>Le mercredi 06 décembre 2006 à 14:51 +0100, Hubert FONGARNAND a écrit :<br /><blockquote type="CITE"><font
color="#000000">I'veseen this morning that PostGreSQL 8.2 was released!</font><br /><br /><font color="#000000">I've
updatedmy dev. server, and : this SQLstatement fail :</font><br /><br /><pre>
 
<font color="#000000">select count(*) </font>
<font color="#000000">from NODE  </font>
<font color="#000000">where NODE_ID </font>
<font color="#000000">in (select NODE_ID from NODE where NODE_TRASH=0  limit 1  offset 0)</font>

</pre> <font color="#000000">with :</font><br /><br /><font color="#000000">ERREUR: failed to find unique expression in
subplantlist</font><br /><font color="#000000">État SQL :XX000</font><br /><br /><font color="#000000">I downgrade to
PostGreSQL8.1.5...</font><br /><br /><font color="#000000">Thanks to fix this!</font><br /><br /><font
color="#000000">_______________________________________________</font><br/><font color="#000000">Ce message et les
ventuelsdocuments joints peuvent contenir des informations confidentielles.</font><br /><font color="#000000">Au cas o挰
ilne vous serait pas destin, nous vous remercions de bien vouloir le supprimer et en aviser imm柩diatement l'expditeur.
Touteutilisation de ce message non conforme † sa destination, toute diffusion ou publication, totale ou partielle et
quelqu'en soit le moyen est formellement interdite.</font><br /><font color="#000000">Les communications sur internet
n'tantpas s整curises, l'intउgrit de ce message n'est pas assur獡e et la socitて mettrice ne peut 汢tre tenue pour
responsablede son contenu.</font></blockquote> _______________________________________________<br />Ce message et les
�ventuelsdocuments joints peuvent contenir des informations confidentielles.<br />Au cas o� il ne vous serait pas
destin�,nous vous remercions de bien vouloir le supprimer et en aviser imm�diatement l'exp�diteur. Toute utilisation de
cemessage non conforme � sa destination, toute diffusion ou publication, totale ou partielle et quel qu'en soit le
moyenest formellement interdite.<br />Les communications sur internet n'�tant pas s�curis�es, l'int�grit� de ce message
n'estpas assur�e et la soci�t� �mettrice ne peut �tre tenue pour responsable de son contenu. 

Re: Bug in PostGreSQL 8.2

From
"Thomas H."
Date:

for what its worth: i have just encountered the same problem with a different query:
 
-------------------
UPDATE logs.pagehits SET page = lower(page)
WHERE page IN
(
    SELECT DISTINCT ON (lower(page)) page
    FROM logs.pagehits
    WHERE lower(page) <> page AND NOT lower(page) IN (SELECT page FROM logs.pagehits WHERE page = lower(page))
)
-------------------
 
this will result in:
ERROR:  failed to find unique expression in subplan tlist
 
it can be easily "fixed" by doing an additional subselect:
 
-------------------
UPDATE logs.pagehits SET page = lower(page)
WHERE page IN
(
    SELECT page FROM
    (
        SELECT DISTINCT ON (lower(page)) page
        FROM logs.pagehits
        WHERE lower(page) <> page AND NOT lower(page) IN (SELECT page FROM logs.pagehits WHERE page = lower(page))
        AS upperpages
    )
)
-------------------
 
"page" field is a varchar(255)
 
(the query finds those page hits entries that are non-lowercase and for which no lowercase version exists. page ressembles the url. if more than one way of writing exists, for example "/Faq/" and "/FAQ", only one is changed to comply with the primary key)
 
- thomas
 
----- Original Message -----
Sent: Wednesday, December 06, 2006 5:15 PM
Subject: Re: [HACKERS] Bug in PostGreSQL 8.2

Complete example :

./configure  --prefix=/opt/pg82--with-perl --with-python --with-tcl --enable-nls
make
make install

/opt/pg82/bin/initdb -D /var/lib/postgresql/data82/ --locale=fr_FR.utf8 -W
/opt/pg82/bin/pg_ctl -D /var/lib/postgresql/data82 -l journaltrace start

and with pgadmin 3

CREATE TABLE node
(
  node_id character varying(36) NOT NULL ,
  node_trash integer NOT NULL DEFAULT 0,
  CONSTRAINT pk_node PRIMARY KEY (node_id)
) 
WITH OIDS;

select count(*) 
from NODE  
where NODE_ID 
in (select NODE_ID from NODE where NODE_TRASH=0  limit 1  offset 0)

and

ERREUR: failed to find unique expression in subplan tlist
État SQL :XX000

Le mercredi 06 décembre 2006 à 14:51 +0100, Hubert FONGARNAND a écrit :
I've seen this morning that PostGreSQL 8.2 was released!

I've updated my dev. server, and : this SQLstatement fail :

select count(*) 
from NODE  
where NODE_ID 
in (select NODE_ID from NODE where NODE_TRASH=0  limit 1  offset 0)

with :

ERREUR: failed to find unique expression in subplan tlist
État SQL :XX000

I downgrade to PostGreSQL 8.1.5...

Thanks to fix this!

_______________________________________________
Ce message et les ventuels documents joints peuvent contenir des informations confidentielles.
Au cas o挰 il ne vous serait pas destin, nous vous remercions de bien vouloir le supprimer et en aviser imm柩diatement l'expditeur. Toute utilisation de ce message non conforme † sa destination, toute diffusion ou publication, totale ou partielle et quel qu'en soit le moyen est formellement interdite.
Les communications sur internet n'tant pas s整curises, l'intउgrit de ce message n'est pas assur獡e et la socitて mettrice ne peut 汢tre tenue pour responsable de son contenu.
_______________________________________________
Ce message et les �ventuels documents joints peuvent contenir des informations confidentielles.
Au cas o� il ne vous serait pas destin�, nous vous remercions de bien vouloir le supprimer et en aviser imm�diatement l'exp�diteur. Toute utilisation de ce message non conforme � sa destination, toute diffusion ou publication, totale ou partielle et quel qu'en soit le moyen est formellement interdite.
Les communications sur internet n'�tant pas s�curis�es, l'int�grit� de ce message n'est pas assur�e et la soci�t� �mettrice ne peut �tre tenue pour responsable de son contenu.

Re: Bug in PostGreSQL 8.2

From
Hubert FONGARNAND
Date:
PS : It works well with older pgsql version (<8.2)<br /><br /> Le mercredi 06 décembre 2006 à 17:15 +0100, Hubert
FONGARNANDa écrit :<br /><blockquote type="CITE"><font color="#000000">Complete example :</font><br /><br /><font
color="#000000">./configure --prefix=/opt/pg82--with-perl --with-python --with-tcl --enable-nls</font><br /><font
color="#000000">make</font><br/><font color="#000000">make install</font><br /><br /><font
color="#000000">/opt/pg82/bin/initdb-D /var/lib/postgresql/data82/ --locale=fr_FR.utf8 -W</font><br /><font
color="#000000">/opt/pg82/bin/pg_ctl-D /var/lib/postgresql/data82 -l journaltrace start</font><br /><br /><font
color="#000000">andwith pgadmin 3</font><br /><br /><pre>
 
<font color="#000000">CREATE TABLE node</font>
<font color="#000000">(</font>
<font color="#000000">  node_id character varying(36) NOT NULL ,</font>
<font color="#000000">  node_trash integer NOT NULL DEFAULT 0,</font>
<font color="#000000">  CONSTRAINT pk_node PRIMARY KEY (node_id)</font>
<font color="#000000">) </font>
<font color="#000000">WITH OIDS;</font>

<font color="#000000">select count(*) </font>
<font color="#000000">from NODE  </font>
<font color="#000000">where NODE_ID </font>
<font color="#000000">in (select NODE_ID from NODE where NODE_TRASH=0  limit 1  offset 0)</font>
</pre><br /><font color="#000000">and </font><br /><br /><font color="#000000">ERREUR: failed to find unique expression
insubplan tlist</font><br /><font color="#000000">État SQL :XX000</font><br /><br /><font color="#000000">Le mercredi
06décembre 2006 à 14:51 +0100, Hubert FONGARNAND a écrit :</font><br /><blockquote type="CITE"><font
color="#000000">I'veseen this morning that PostGreSQL 8.2 was released!</font><br /><br /><font color="#000000">I've
updatedmy dev. server, and : this SQLstatement fail :</font><br /><br /><pre>
 
<font color="#000000">select count(*) </font>
<font color="#000000">from NODE  </font>
<font color="#000000">where NODE_ID </font>
<font color="#000000">in (select NODE_ID from NODE where NODE_TRASH=0  limit 1  offset 0)</font>

</pre> <font color="#000000">with :</font><br /><br /><font color="#000000">ERREUR: failed to find unique expression in
subplantlist</font><br /><font color="#000000">État SQL :XX000</font><br /><br /><font color="#000000">I downgrade to
PostGreSQL8.1.5...</font><br /><br /><font color="#000000">Thanks to fix this!</font><br /><br /><font
color="#000000">_______________________________________________</font><br/><font color="#000000">Ce message et les
ventuelsdocuments joints peuvent contenir des informations confidentielles.</font><br /><font color="#000000">Au cas o挰
ilne vous serait pas destin, nous vous remercions de bien vouloir le supprimer et en aviser imm柩diatement l'expditeur.
Touteutilisation de ce message non conforme † sa destination, toute diffusion ou publication, totale ou partielle et
quelqu'en soit le moyen est formellement interdite.</font><br /><font color="#000000">Les communications sur internet
n'tantpas s整curises, l'intउgrit de ce message n'est pas assur獡e et la socitて mettrice ne peut 汢tre tenue pour
responsablede son contenu.</font><br /></blockquote><font
color="#000000">_______________________________________________</font><br/><font color="#000000">Ce message et les
ventuelsdocuments joints peuvent contenir des informations confidentielles.</font><br /><font color="#000000">Au cas oK
ilne vous serait pas destin, nous vous remercions de bien vouloir le supprimer et en aviser immediatement l'expditeur.
Touteutilisation de ce message non conforme e sa destination, toute diffusion ou publication, totale ou partielle et
quelqu'en soit le moyen est formellement interdite.</font><br /><font color="#000000">Les communications sur internet
n'tantpas sOcurises, l'intwgrit de ce message n'est pas assur"e et la socits mettrice ne peut tre tenue pour
responsablede son contenu.</font></blockquote> _______________________________________________<br />Ce message et les
�ventuelsdocuments joints peuvent contenir des informations confidentielles.<br />Au cas o� il ne vous serait pas
destin�,nous vous remercions de bien vouloir le supprimer et en aviser imm�diatement l'exp�diteur. Toute utilisation de
cemessage non conforme � sa destination, toute diffusion ou publication, totale ou partielle et quel qu'en soit le
moyenest formellement interdite.<br />Les communications sur internet n'�tant pas s�curis�es, l'int�grit� de ce message
n'estpas assur�e et la soci�t� �mettrice ne peut �tre tenue pour responsable de son contenu. 

Re: Bug in PostGreSQL 8.2

From
Tom Lane
Date:
Hubert FONGARNAND <informatique.internet@fiducial.fr> writes:
> CREATE TABLE node
> (
>   node_id character varying(36) NOT NULL ,
>   node_trash integer NOT NULL DEFAULT 0,
>   CONSTRAINT pk_node PRIMARY KEY (node_id)
> ) 
> WITH OIDS;

> select count(*) 
> from NODE  
> where NODE_ID 
> in (select NODE_ID from NODE where NODE_TRASH=3D0  limit 1  offset 0)

OK, it seems the key bit here is that the IN's subselect has a
varchar(N) column ... you don't see the failure unless the subselect
result column has a nondefault typmod.  So a possibly helpful workaround
until 8.2.1 comes out is to cast NODE_ID to text in the subselect.

Patch committed; thanks for the report!
        regards, tom lane


Re: Bug in PostGreSQL 8.2

From
Hubert FONGARNAND
Date:
Ok, thanks, <br /><br /> We will wait for 8.2.1 to upgrade! (we don't want to introduce bad hacks... on our apps)<br
/><br/> Le mercredi 06 décembre 2006 à 14:43 -0500, Tom Lane a écrit : <blockquote type="CITE"><pre>
 
<font color="#000000">Hubert FONGARNAND <<a
href="mailto:informatique.internet@fiducial.fr">informatique.internet@fiducial.fr</a>>writes:</font>
 
<font color="#000000">> CREATE TABLE node</font>
<font color="#000000">> (</font>
<font color="#000000">>   node_id character varying(36) NOT NULL ,</font>
<font color="#000000">>   node_trash integer NOT NULL DEFAULT 0,</font>
<font color="#000000">>   CONSTRAINT pk_node PRIMARY KEY (node_id)</font>
<font color="#000000">> ) </font>
<font color="#000000">> WITH OIDS;</font>

<font color="#000000">> select count(*) </font>
<font color="#000000">> from NODE  </font>
<font color="#000000">> where NODE_ID </font>
<font color="#000000">> in (select NODE_ID from NODE where NODE_TRASH=3D0  limit 1  offset 0)</font>

<font color="#000000">OK, it seems the key bit here is that the IN's subselect has a</font>
<font color="#000000">varchar(N) column ... you don't see the failure unless the subselect</font>
<font color="#000000">result column has a nondefault typmod.  So a possibly helpful workaround</font>
<font color="#000000">until 8.2.1 comes out is to cast NODE_ID to text in the subselect.</font>

<font color="#000000">Patch committed; thanks for the report!</font>

<font color="#000000">            regards, tom lane</font>
</pre></blockquote> _______________________________________________<br />Ce message et les �ventuels documents joints
peuventcontenir des informations confidentielles.<br />Au cas o� il ne vous serait pas destin�, nous vous remercions de
bienvouloir le supprimer et en aviser imm�diatement l'exp�diteur. Toute utilisation de ce message non conforme � sa
destination,toute diffusion ou publication, totale ou partielle et quel qu'en soit le moyen est formellement
interdite.<br/>Les communications sur internet n'�tant pas s�curis�es, l'int�grit� de ce message n'est pas assur�e et
lasoci�t� �mettrice ne peut �tre tenue pour responsable de son contenu.