Frequently Asked Questions (FAQ) for PostgreSQL
- Last updated: Sat Jan 29 23:15:42 EST 2005
+ Last updated: Sat Jan 29 23:20:03 EST 2005
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
4.16) Why does my large-object operations get "invalid large obj
descriptor"?
4.17) How do I create a column that will default to the current time?
- 4.18) Why are my subqueries using IN so slow?
- 4.19) How do I perform an outer join?
- 4.20) How do I perform queries using multiple databases?
- 4.21) How do I return multiple rows or columns from a function?
- 4.22) Why can't I reliably create/drop temporary tables in PL/PgSQL
+ 4.18) How do I perform an outer join?
+ 4.19) How do I perform queries using multiple databases?
+ 4.20) How do I return multiple rows or columns from a function?
+ 4.21) Why can't I reliably create/drop temporary tables in PL/PgSQL
functions?
- 4.23) What encryption options are available?
+ 4.22) What encryption options are available?
Extending PostgreSQL
Use CURRENT_TIMESTAMP:
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
- 4.18) Why are my subqueries using IN so slow?
-
- In versions prior to 7.4, subqueries were joined to outer queries by
- sequentially scanning the result of the subquery for each row of the
- outer query. If the subquery returns only a few rows and the outer
- query returns many rows, IN is fastest. To speed up other queries,
- replace IN with EXISTS:
- SELECT *
- FROM tab
- WHERE col IN (SELECT subcol FROM subtab);
-
- to:
- SELECT *
- FROM tab
- WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
-
- For this to be fast, subcol should be an indexed column.
-
- In version 7.4 and later, IN actually uses the same sophisticated join
- techniques as normal queries, and is prefered to using EXISTS.
-
- 4.19) How do I perform an outer join?
+ 4.18) How do I perform an outer join?
PostgreSQL supports outer joins using the SQL standard syntax. Here
are two examples:
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
ORDER BY col1
- 4.20) How do I perform queries using multiple databases?
+ 4.19) How do I perform queries using multiple databases?
There is no way to query a database other than the current one.
Because PostgreSQL loads database-specific system catalogs, it is
course, a client can make simultaneous connections to different
databases and merge the results on the client side.
- 4.21) How do I return multiple rows or columns from a function?
+ 4.20) How do I return multiple rows or columns from a function?
In 7.3, you can easily return multiple rows or columns from a
function, http://techdocs.postgresql.org/guides/SetReturningFunctions.
- 4.22) Why can't I reliably create/drop temporary tables in PL/PgSQL
+ 4.21) Why can't I reliably create/drop temporary tables in PL/PgSQL
functions?
PL/PgSQL caches function contents, and an unfortunate side effect is
table access in PL/PgSQL. This will cause the query to be reparsed
every time.
- 4.23) What encryption options are available?
+ 4.22) What encryption options are available?
* contrib/pgcrypto contains many encryption functions for use in SQL
queries.
alink="#0000ff">
<H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1>
- <P>Last updated: Sat Jan 29 23:15:42 EST 2005</P>
+ <P>Last updated: Sat Jan 29 23:20:03 EST 2005</P>
<P>Current maintainer: Bruce Momjian (<A href=
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
<I>"invalid large obj descriptor"</I>?<BR>
<A href="#4.17">4.17</A>) How do I create a column that will
default to the current time?<BR>
- <A href="#4.18">4.18</A>) Why are my subqueries using
- <CODE><SMALL>IN</SMALL></CODE> so slow?<BR>
- <A href="#4.19">4.19</A>) How do I perform an outer join?<BR>
- <A href="#4.20">4.20</A>) How do I perform queries using multiple
+ <A href="#4.18">4.18</A>) How do I perform an outer join?<BR>
+ <A href="#4.19">4.19</A>) How do I perform queries using multiple
databases?<BR>
- <A href="#4.21">4.21</A>) How do I return multiple rows or columns
+ <A href="#4.20">4.20</A>) How do I return multiple rows or columns
from a function?<BR>
- <A href="#4.22">4.22</A>) Why can't I reliably create/drop
+ <A href="#4.21">4.21</A>) Why can't I reliably create/drop
temporary tables in PL/PgSQL functions?<BR>
- <A href="#4.23">4.23</A>) What encryption options are available?<BR>
+ <A href="#4.22">4.22</A>) What encryption options are available?<BR>
<H2 align="center">Extending PostgreSQL</H2>
</CODE>
</PRE>
- <H4><A name="4.18">4.18</A>) Why are my subqueries using
- <CODE><SMALL>IN</SMALL></CODE> so slow?</H4>
-
- <P>In versions prior to 7.4, subqueries were joined to outer queries
- by sequentially scanning the result of the subquery for each row of
- the outer query. If the subquery returns only a few rows and the outer
- query returns many rows, <CODE><SMALL>IN</SMALL></CODE> is fastest. To
- speed up other queries, replace <CODE>IN</CODE> with
- <CODE>EXISTS</CODE>:</P>
-<PRE> SELECT *
- FROM tab
- WHERE col IN (SELECT subcol FROM subtab);
-</PRE>
- to:
-<PRE> SELECT *
- FROM tab
- WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
-</PRE>
-
- For this to be fast, <CODE>subcol</CODE> should be an indexed column.
- <P>In version 7.4 and later, <CODE>IN</CODE> actually uses the same
- sophisticated join techniques as normal queries, and is prefered
- to using <CODE>EXISTS</CODE>.
-
- <H4><A name="4.19">4.19</A>) How do I perform an outer join?</H4>
+ <H4><A name="4.18">4.18</A>) How do I perform an outer join?</H4>
<P>PostgreSQL supports outer joins using the SQL standard syntax.
Here are two examples:</P>
ORDER BY col1
</PRE>
- <H4><A name="4.20">4.20</A>) How do I perform queries using
+ <H4><A name="4.19">4.19</A>) How do I perform queries using
multiple databases?</H4>
<P>There is no way to query a database other than the current one.
connections to different databases and merge the results on the
client side.</P>
- <H4><A name="4.21">4.21</A>) How do I return multiple rows or
+ <H4><A name="4.20">4.20</A>) How do I return multiple rows or
columns from a function?</H4>
<P>In 7.3, you can easily return multiple rows or columns from a
<a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
http://techdocs.postgresql.org/guides/SetReturningFunctions</a>.
- <H4><A name="4.22">4.22</A>) Why can't I reliably create/drop
+ <H4><A name="4.21">4.21</A>) Why can't I reliably create/drop
temporary tables in PL/PgSQL functions?</H4>
<P>PL/PgSQL caches function contents, and an unfortunate side effect
is that if a PL/PgSQL function accesses a temporary table, and that
<SMALL>EXECUTE</SMALL> for temporary table access in PL/PgSQL. This
will cause the query to be reparsed every time.</P>
- <H4><A name="4.23">4.23</A>) What encryption options are available?
+ <H4><A name="4.22">4.22</A>) What encryption options are available?
</H4>
<UL>
<LI><I>contrib/pgcrypto</I> contains many encryption functions for