mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Remove FAQ item about binary cursors.
This commit is contained in:
123
doc/FAQ
123
doc/FAQ
@ -1,7 +1,7 @@
|
||||
|
||||
Frequently Asked Questions (FAQ) for PostgreSQL
|
||||
|
||||
Last updated: Sat Jan 29 22:59:12 EST 2005
|
||||
Last updated: Sat Jan 29 23:02:37 EST 2005
|
||||
|
||||
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
|
||||
|
||||
@ -49,43 +49,42 @@
|
||||
|
||||
Operational Questions
|
||||
|
||||
4.1) What is the difference between binary cursors and normal cursors?
|
||||
4.2) How do I SELECT only the first few rows of a query? A random row?
|
||||
4.3) How do I find out what tables, indexes, databases, and users are
|
||||
4.1) How do I SELECT only the first few rows of a query? A random row?
|
||||
4.2) How do I find out what tables, indexes, databases, and users are
|
||||
defined? How do I see the queries used by psql to display them?
|
||||
4.4) How do you remove a column from a table, or change its data type?
|
||||
4.5) What is the maximum size for a row, a table, and a database?
|
||||
4.6) How much database disk space is required to store data from a
|
||||
4.3) How do you remove a column from a table, or change its data type?
|
||||
4.4) What is the maximum size for a row, a table, and a database?
|
||||
4.5) How much database disk space is required to store data from a
|
||||
typical text file?
|
||||
4.7) My queries are slow or don't make use of the indexes. Why?
|
||||
4.8) How do I see how the query optimizer is evaluating my query?
|
||||
4.9) What is an R-tree index?
|
||||
4.10) What is the Genetic Query Optimizer?
|
||||
4.11) How do I perform regular expression searches and
|
||||
4.6) My queries are slow or don't make use of the indexes. Why?
|
||||
4.7) How do I see how the query optimizer is evaluating my query?
|
||||
4.8) What is an R-tree index?
|
||||
4.9) What is the Genetic Query Optimizer?
|
||||
4.10) How do I perform regular expression searches and
|
||||
case-insensitive regular expression searches? How do I use an index
|
||||
for case-insensitive searches?
|
||||
4.12) In a query, how do I detect if a field is NULL?
|
||||
4.13) What is the difference between the various character types?
|
||||
4.14.0) How do I create a serial/auto-incrementing field?
|
||||
4.14.1) How do I get the value of a SERIAL insert?
|
||||
4.14.2) Doesn't currval() lead to a race condition with other users?
|
||||
4.14.3) Why aren't my sequence numbers reused on transaction abort?
|
||||
4.11) In a query, how do I detect if a field is NULL?
|
||||
4.12) What is the difference between the various character types?
|
||||
4.13.0) How do I create a serial/auto-incrementing field?
|
||||
4.13.1) How do I get the value of a SERIAL insert?
|
||||
4.13.2) Doesn't currval() lead to a race condition with other users?
|
||||
4.13.3) Why aren't my sequence numbers reused on transaction abort?
|
||||
Why are there gaps in the numbering of my sequence/SERIAL column?
|
||||
4.15) What is an OID? What is a TID?
|
||||
4.16) What is the meaning of some of the terms used in PostgreSQL?
|
||||
4.17) Why do I get the error "ERROR: Memory exhausted in
|
||||
4.14) What is an OID? What is a TID?
|
||||
4.15) What is the meaning of some of the terms used in PostgreSQL?
|
||||
4.16) Why do I get the error "ERROR: Memory exhausted in
|
||||
AllocSetAlloc()"?
|
||||
4.18) How do I tell what PostgreSQL version I am running?
|
||||
4.19) Why does my large-object operations get "invalid large obj
|
||||
4.17) How do I tell what PostgreSQL version I am running?
|
||||
4.18) Why does my large-object operations get "invalid large obj
|
||||
descriptor"?
|
||||
4.20) How do I create a column that will default to the current time?
|
||||
4.21) Why are my subqueries using IN so slow?
|
||||
4.22) How do I perform an outer join?
|
||||
4.23) How do I perform queries using multiple databases?
|
||||
4.24) How do I return multiple rows or columns from a function?
|
||||
4.25) Why can't I reliably create/drop temporary tables in PL/PgSQL
|
||||
4.19) How do I create a column that will default to the current time?
|
||||
4.20) Why are my subqueries using IN so slow?
|
||||
4.21) How do I perform an outer join?
|
||||
4.22) How do I perform queries using multiple databases?
|
||||
4.23) How do I return multiple rows or columns from a function?
|
||||
4.24) Why can't I reliably create/drop temporary tables in PL/PgSQL
|
||||
functions?
|
||||
4.26) What encryption options are available?
|
||||
4.25) What encryption options are available?
|
||||
|
||||
Extending PostgreSQL
|
||||
|
||||
@ -567,11 +566,7 @@ log_*
|
||||
|
||||
Operational Questions
|
||||
|
||||
4.1) What is the difference between binary cursors and normal cursors?
|
||||
|
||||
See the DECLARE manual page for a description.
|
||||
|
||||
4.2) How do I SELECT only the first few rows of a query? A random row?
|
||||
4.1) How do I SELECT only the first few rows of a query? A random row?
|
||||
|
||||
See the FETCH manual page, or use SELECT ... LIMIT....
|
||||
|
||||
@ -587,7 +582,7 @@ log_*
|
||||
ORDER BY random()
|
||||
LIMIT 1;
|
||||
|
||||
4.3) How do I find out what tables, indexes, databases, and users are
|
||||
4.2) How do I find out what tables, indexes, databases, and users are
|
||||
defined? How do I see the queries used by psql to display them?
|
||||
|
||||
Use the \dt command to see tables in psql. For a complete list of
|
||||
@ -606,7 +601,7 @@ log_*
|
||||
many of the SELECTs needed to get information from the database system
|
||||
tables.
|
||||
|
||||
4.4) How do you remove a column from a table, or change its data type?
|
||||
4.3) How do you remove a column from a table, or change its data type?
|
||||
|
||||
DROP COLUMN functionality was added in release 7.3 with ALTER TABLE
|
||||
DROP COLUMN. In earlier versions, you can do this:
|
||||
@ -632,7 +627,7 @@ log_*
|
||||
You might then want to do VACUUM FULL tab to reclaim the disk space
|
||||
used by the expired rows.
|
||||
|
||||
4.5) What is the maximum size for a row, a table, and a database?
|
||||
4.4) What is the maximum size for a row, a table, and a database?
|
||||
|
||||
These are the limits:
|
||||
Maximum size for a database? unlimited (32 TB databases exist)
|
||||
@ -654,7 +649,7 @@ log_*
|
||||
The maximum table size and maximum number of columns can be quadrupled
|
||||
by increasing the default block size to 32k.
|
||||
|
||||
4.6) How much database disk space is required to store data from a typical
|
||||
4.5) How much database disk space is required to store data from a typical
|
||||
text file?
|
||||
|
||||
A PostgreSQL database may require up to five times the disk space to
|
||||
@ -688,7 +683,7 @@ log_*
|
||||
|
||||
NULLs are stored as bitmaps, so they use very little space.
|
||||
|
||||
4.7) My queries are slow or don't make use of the indexes. Why?
|
||||
4.6) My queries are slow or don't make use of the indexes. Why?
|
||||
|
||||
Indexes are not automatically used by every query. Indexes are only
|
||||
used if the table is larger than a minimum size, and the query selects
|
||||
@ -730,7 +725,7 @@ log_*
|
||||
[a-e].
|
||||
* Case-insensitive searches such as ILIKE and ~* do not utilize
|
||||
indexes. Instead, use functional indexes, which are described in
|
||||
section 4.11.
|
||||
section 4.10.
|
||||
* The default C locale must be used during initdb because it is not
|
||||
possible to know the next-greater character in a non-C locale. You
|
||||
can create a special
|
||||
@ -743,11 +738,11 @@ LIKE
|
||||
types exactly match the index's column types. This is particularly
|
||||
true of int2, int8, and numeric column indexes.
|
||||
|
||||
4.8) How do I see how the query optimizer is evaluating my query?
|
||||
4.7) How do I see how the query optimizer is evaluating my query?
|
||||
|
||||
See the EXPLAIN manual page.
|
||||
|
||||
4.9) What is an R-tree index?
|
||||
4.8) What is an R-tree index?
|
||||
|
||||
An R-tree index is used for indexing spatial data. A hash index can't
|
||||
handle range searches. A B-tree index only handles range searches in a
|
||||
@ -770,13 +765,13 @@ LIKE
|
||||
extending R-trees requires a bit of work and we don't currently have
|
||||
any documentation on how to do it.
|
||||
|
||||
4.10) What is the Genetic Query Optimizer?
|
||||
4.9) What is the Genetic Query Optimizer?
|
||||
|
||||
The GEQO module speeds query optimization when joining many tables by
|
||||
means of a Genetic Algorithm (GA). It allows the handling of large
|
||||
join queries through nonexhaustive search.
|
||||
|
||||
4.11) How do I perform regular expression searches and case-insensitive
|
||||
4.10) How do I perform regular expression searches and case-insensitive
|
||||
regular expression searches? How do I use an index for case-insensitive
|
||||
searches?
|
||||
|
||||
@ -793,11 +788,11 @@ LIKE
|
||||
functional index, it will be used:
|
||||
CREATE INDEX tabindex ON tab (lower(col));
|
||||
|
||||
4.12) In a query, how do I detect if a field is NULL?
|
||||
4.11) In a query, how do I detect if a field is NULL?
|
||||
|
||||
You test the column with IS NULL and IS NOT NULL.
|
||||
|
||||
4.13) What is the difference between the various character types?
|
||||
4.12) What is the difference between the various character types?
|
||||
|
||||
Type Internal Name Notes
|
||||
--------------------------------------------------
|
||||
@ -825,7 +820,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
|
||||
particularly values that include NULL bytes. All the types described
|
||||
here have similar performance characteristics.
|
||||
|
||||
4.14.1) How do I create a serial/auto-incrementing field?
|
||||
4.13.1) How do I create a serial/auto-incrementing field?
|
||||
|
||||
PostgreSQL supports a SERIAL data type. It auto-creates a sequence.
|
||||
For example, this:
|
||||
@ -846,11 +841,11 @@ BYTEA bytea variable-length byte array (null-byte safe)
|
||||
However, if you need to dump and reload the database, you need to use
|
||||
pg_dump's -o option or COPY WITH OIDS option to preserve the OIDs.
|
||||
|
||||
4.14.2) How do I get the value of a SERIAL insert?
|
||||
4.13.2) How do I get the value of a SERIAL insert?
|
||||
|
||||
One approach is to retrieve the next SERIAL value from the sequence
|
||||
object with the nextval() function before inserting and then insert it
|
||||
explicitly. Using the example table in 4.14.1, an example in a
|
||||
explicitly. Using the example table in 4.13.1, an example in a
|
||||
pseudo-language would look like this:
|
||||
new_id = execute("SELECT nextval('person_id_seq')");
|
||||
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
|
||||
@ -872,19 +867,19 @@ BYTEA bytea variable-length byte array (null-byte safe)
|
||||
billion. In Perl, using DBI with the DBD::Pg module, the oid value is
|
||||
made available via $sth->{pg_oid_status} after $sth->execute().
|
||||
|
||||
4.14.3) Doesn't currval() lead to a race condition with other users?
|
||||
4.13.3) Doesn't currval() lead to a race condition with other users?
|
||||
|
||||
No. currval() returns the current value assigned by your backend, not
|
||||
by all users.
|
||||
|
||||
4.14.4) Why aren't my sequence numbers reused on transaction abort? Why are
|
||||
4.13.4) Why aren't my sequence numbers reused on transaction abort? Why are
|
||||
there gaps in the numbering of my sequence/SERIAL column?
|
||||
|
||||
To improve concurrency, sequence values are given out to running
|
||||
transactions as needed and are not locked until the transaction
|
||||
completes. This causes gaps in numbering from aborted transactions.
|
||||
|
||||
4.15) What is an OID? What is a TID?
|
||||
4.14) What is an OID? What is a TID?
|
||||
|
||||
Every row that is created in PostgreSQL gets a unique OID unless
|
||||
created WITHOUT OIDS. OIDs are autotomatically assigned unique 4-byte
|
||||
@ -901,7 +896,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
|
||||
values. TIDs change after rows are modified or reloaded. They are used
|
||||
by index entries to point to physical rows.
|
||||
|
||||
4.16) What is the meaning of some of the terms used in PostgreSQL?
|
||||
4.15) What is the meaning of some of the terms used in PostgreSQL?
|
||||
|
||||
Some of the source code and older documentation use terms that have
|
||||
more common usage. Here are some:
|
||||
@ -919,7 +914,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
|
||||
http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
|
||||
/glossary.html
|
||||
|
||||
4.17) Why do I get the error "ERROR: Memory exhausted in AllocSetAlloc()"?
|
||||
4.16) Why do I get the error "ERROR: Memory exhausted in AllocSetAlloc()"?
|
||||
|
||||
You probably have run out of virtual memory on your system, or your
|
||||
kernel has a low limit for certain resources. Try this before starting
|
||||
@ -934,11 +929,11 @@ BYTEA bytea variable-length byte array (null-byte safe)
|
||||
problem with the SQL client because the backend is returning too much
|
||||
data, try it before starting the client.
|
||||
|
||||
4.18) How do I tell what PostgreSQL version I am running?
|
||||
4.17) How do I tell what PostgreSQL version I am running?
|
||||
|
||||
From psql, type SELECT version();
|
||||
|
||||
4.19) Why does my large-object operations get "invalid large obj
|
||||
4.18) Why does my large-object operations get "invalid large obj
|
||||
descriptor"?
|
||||
|
||||
You need to put BEGIN WORK and COMMIT around any use of a large object
|
||||
@ -953,12 +948,12 @@ BYTEA bytea variable-length byte array (null-byte safe)
|
||||
If you are using a client interface like ODBC you may need to set
|
||||
auto-commit off.
|
||||
|
||||
4.20) How do I create a column that will default to the current time?
|
||||
4.19) How do I create a column that will default to the current time?
|
||||
|
||||
Use CURRENT_TIMESTAMP:
|
||||
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
|
||||
|
||||
4.21) Why are my subqueries using IN so slow?
|
||||
4.20) 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
|
||||
@ -979,7 +974,7 @@ CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
|
||||
In version 7.4 and later, IN actually uses the same sophisticated join
|
||||
techniques as normal queries, and is prefered to using EXISTS.
|
||||
|
||||
4.22) How do I perform an outer join?
|
||||
4.21) How do I perform an outer join?
|
||||
|
||||
PostgreSQL supports outer joins using the SQL standard syntax. Here
|
||||
are two examples:
|
||||
@ -1009,7 +1004,7 @@ CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
|
||||
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
|
||||
ORDER BY col1
|
||||
|
||||
4.23) How do I perform queries using multiple databases?
|
||||
4.22) 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
|
||||
@ -1019,12 +1014,12 @@ CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
|
||||
course, a client can make simultaneous connections to different
|
||||
databases and merge the results on the client side.
|
||||
|
||||
4.24) How do I return multiple rows or columns from a function?
|
||||
4.23) 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.25) Why can't I reliably create/drop temporary tables in PL/PgSQL
|
||||
4.24) Why can't I reliably create/drop temporary tables in PL/PgSQL
|
||||
functions?
|
||||
|
||||
PL/PgSQL caches function contents, and an unfortunate side effect is
|
||||
@ -1035,7 +1030,7 @@ CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
|
||||
table access in PL/PgSQL. This will cause the query to be reparsed
|
||||
every time.
|
||||
|
||||
4.26) What encryption options are available?
|
||||
4.25) What encryption options are available?
|
||||
|
||||
* contrib/pgcrypto contains many encryption functions for use in SQL
|
||||
queries.
|
||||
|
Reference in New Issue
Block a user