Optimize SELECT * in EXISTS - Mailing list pgsql-hackers

From Peter Eisentraut
Subject Optimize SELECT * in EXISTS
Date
Msg-id 9b301c70-3909-4f0f-98ca-9e3c4d142f3e@eisentraut.org
Whole thread Raw
Responses Re: Optimize SELECT * in EXISTS
List pgsql-hackers
I read in the SQL standard that SELECT * in EXISTS is not supposed to be 
expanded to all columns, but only to an arbitrary literal.  This 
corresponds to the recommendation in the PostgreSQL documentation to 
write EXISTS (SELECT 1 ...) instead.  But not even our own tests and 
example code use that latter convention consistently, so I think many 
users don't know it or observe it either.  So implementing that little 
optimization for SELECT * seems reasonable.

The attached patch implements the transformation, meaning in EXISTS 
(SELECT * FROM ...), the star is replaced by an empty select list 
(taking advantage of the support for zero-column tables in PostgreSQL).
There are plenty of tests involving this construct, so I didn't add any 
more explicit tests.  (But it might be worth adding a test involving 
column privileges.)

Thoughts?

Attachment

pgsql-hackers by date:

Previous
From: Bertrand Drouvot
Date:
Subject: Re: Flush some statistics within running transactions
Next
From: David Rowley
Date:
Subject: Re: Optimize SELECT * in EXISTS