Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
0896707e
Commit
0896707e
authored
Oct 14, 2002
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
FAQ updates from Ian Barwick.
parent
ad4ce7aa
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
176 additions
and
188 deletions
+176
-188
doc/FAQ
doc/FAQ
+89
-86
doc/src/FAQ/FAQ.html
doc/src/FAQ/FAQ.html
+87
-102
No files found.
doc/FAQ
View file @
0896707e
Frequently Asked Questions (FAQ) for PostgreSQL
Frequently Asked Questions (FAQ) for PostgreSQL
Last updated:
Fri Oct 11 13:54
:56 EDT 2002
Last updated:
Sun Oct 13 22:49
:56 EDT 2002
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
...
@@ -112,7 +112,7 @@
...
@@ -112,7 +112,7 @@
General Questions
General Questions
1.1) What is PostgreSQL?
1.1) What is PostgreSQL?
How is it pronounced?
PostgreSQL is pronounced Post-Gres-Q-L.
PostgreSQL is pronounced Post-Gres-Q-L.
...
@@ -122,11 +122,11 @@
...
@@ -122,11 +122,11 @@
replaces the PostQuel query language with an extended subset of SQL.
replaces the PostQuel query language with an extended subset of SQL.
PostgreSQL is free and the complete source is available.
PostgreSQL is free and the complete source is available.
PostgreSQL development is performed by a team of
Internet developers
PostgreSQL development is performed by a team of
developers who all
who all subscribe to the PostgreSQL development mailing list. The
subscribe to the PostgreSQL development mailing list. The current
c
urrent coordinator is Marc G. Fournier (scrappy@PostgreSQL.org). (See
c
oordinator is Marc G. Fournier (scrappy@PostgreSQL.org). (See section
below on how to join). This team is now responsible for all
1.6 on how to join). This team is now responsible for all development
development
of PostgreSQL.
of PostgreSQL.
The authors of PostgreSQL 1.01 were Andrew Yu and Jolly Chen. Many
The authors of PostgreSQL 1.01 were Andrew Yu and Jolly Chen. Many
others have contributed to the porting, testing, debugging, and
others have contributed to the porting, testing, debugging, and
...
@@ -183,18 +183,22 @@
...
@@ -183,18 +183,22 @@
Client
Client
It is possible to compile the libpq C library, psql, and other
It is possible to compile the libpq C library, psql, and other
interfaces and binaries to run on MS Windows platforms. In this case,
interfaces and client applications to run on MS Windows platforms. In
the client is running on MS Windows, and communicates via TCP/IP to a
this case, the client is running on MS Windows, and communicates via
server running on one of our supported Unix platforms. A file
TCP/IP to a server running on one of our supported Unix platforms. A
win31.mak is included in the distribution for making a Win32 libpq
file win32.mak is included in the distribution for making a Win32
library and psql. PostgreSQL also communicates with ODBC clients.
libpq library and psql. PostgreSQL also communicates with ODBC
clients.
Server
Server
The database server can run on Windows NT and Win2k using Cygwin, the
The database server can run on Windows NT and Win2k using Cygwin, the
Cygnus Unix/NT porting library. See pgsql/doc/FAQ_MSWIN in the
Cygnus Unix/NT porting library. See pgsql/doc/FAQ_MSWIN in the
distribution or the MS Windows FAQ on our web site. We have no plan to
distribution or the MS Windows FAQ at
do a native port to any Microsoft platform.
http://www.PostgreSQL.org/docs/faq-mswin.html.
A native port to some Microsoft platforms is currently being worked
upon.
1.5) Where can I get PostgreSQL?
1.5) Where can I get PostgreSQL?
...
@@ -240,7 +244,7 @@
...
@@ -240,7 +244,7 @@
Unix command irc -c '#PostgreSQL' "$USER" irc.phoenix.net.
Unix command irc -c '#PostgreSQL' "$USER" irc.phoenix.net.
A list of commercial support companies is available at
A list of commercial support companies is available at
http://www.
postgresql
.org/users-lounge/commercial-support.html.
http://www.
PostgreSQL
.org/users-lounge/commercial-support.html.
1.7) What is the latest release?
1.7) What is the latest release?
...
@@ -258,9 +262,9 @@
...
@@ -258,9 +262,9 @@
There are two PostgreSQL books available online at
There are two PostgreSQL books available online at
http://www.PostgreSQL.org/docs/awbook.html and
http://www.PostgreSQL.org/docs/awbook.html and
http://www.commandprompt.com/ppbook/. There is a list of PostgreSQL
http://www.commandprompt.com/ppbook/. There is a list of PostgreSQL
books available for purchase at http://www.
postgresql
.org/books/.
books available for purchase at http://www.
ca.PostgreSQL
.org/books/.
There is also a collection of PostgreSQL technical articles at
There is also a collection of PostgreSQL technical articles at
http://techdocs.
postgresql
.org/.
http://techdocs.
PostgreSQL
.org/.
psql has some nice \d commands to show information about types,
psql has some nice \d commands to show information about types,
operators, functions, aggregates, etc.
operators, functions, aggregates, etc.
...
@@ -307,8 +311,9 @@
...
@@ -307,8 +311,9 @@
1.13) How do I submit a bug report?
1.13) How do I submit a bug report?
Please visit the PostgreSQL BugTool page, which gives guidelines and
Please visit the PostgreSQL BugTool page at
directions on how to submit a bug.
http://www.PostgreSQL.org/bugs/bugs.php, which gives guidelines and
directions on how to submit a bug report.
Also check out our ftp site ftp://ftp.PostgreSQL.org/pub to see if
Also check out our ftp site ftp://ftp.PostgreSQL.org/pub to see if
there is a more recent PostgreSQL version or patches.
there is a more recent PostgreSQL version or patches.
...
@@ -346,14 +351,14 @@
...
@@ -346,14 +351,14 @@
compare favorably to other database software in this area.
compare favorably to other database software in this area.
Support
Support
Our mailing list
provides a large group of developers and users
Our mailing list
s provide contact with a large group of
to help resolve any problems encountered. While we can not
developers and users to help resolve any problems encountered.
guarantee a fix, commercial DBMSs do not always supply a fix
While we cannot guarantee a fix, commercial DBMSs do not always
either. Direct access to developers, the user community,
supply a fix either. Direct access to developers, the user
manuals, and the source code often make PostgreSQL support
community, manuals, and the source code often make PostgreSQL
sup
erior to other DBMSs. There is commercial per-incident
sup
port superior to other DBMSs. There is commercial
support available for those who need it. (See support
FAQ
per-incident support available for those who need it. (See
FAQ
item
.)
section 1.6
.)
Price
Price
We are free for all use, both commercial and non-commercial.
We are free for all use, both commercial and non-commercial.
...
@@ -362,9 +367,9 @@
...
@@ -362,9 +367,9 @@
1.15) How can I financially assist PostgreSQL?
1.15) How can I financially assist PostgreSQL?
PostgreSQL has had a first-class infrastructure since we started
six
PostgreSQL has had a first-class infrastructure since we started
in
years ago. This is all thanks to Marc Fournier, who has created an
d
1994. This is all thanks to Marc Fournier, who has created and manage
d
managed
this infrastructure over the years.
this infrastructure over the years.
Quality infrastructure is very important to an open-source project. It
Quality infrastructure is very important to an open-source project. It
prevents disruptions that can greatly delay forward movement of the
prevents disruptions that can greatly delay forward movement of the
...
@@ -373,8 +378,7 @@
...
@@ -373,8 +378,7 @@
Of course, this infrastructure is not cheap. There are a variety of
Of course, this infrastructure is not cheap. There are a variety of
monthly and one-time expenses that are required to keep it going. If
monthly and one-time expenses that are required to keep it going. If
you or your company has money it can donate to help fund this effort,
you or your company has money it can donate to help fund this effort,
please go to https://store.pgsql.com/shopping/index.php?id=1 and make
please go to http://store.pgsql.com/shopping/ and make a donation.
a donation.
Although the web page mentions PostgreSQL, Inc, the "contributions"
Although the web page mentions PostgreSQL, Inc, the "contributions"
item is solely to support the PostgreSQL project and does not fund any
item is solely to support the PostgreSQL project and does not fund any
...
@@ -407,39 +411,37 @@
...
@@ -407,39 +411,37 @@
A nice introduction to Database-backed Web pages can be seen at:
A nice introduction to Database-backed Web pages can be seen at:
http://www.webreview.com
http://www.webreview.com
There is also one at http://www.phone.net/home/mwm/hotlist/.
For Web integration, PHP is an excellent interface. It is at
For Web integration, PHP is an excellent interface. It is at
http://www.php.net.
http://www.php.net.
For complex cases, many use the Perl interface and CGI.pm.
For complex cases, many use the Perl interface and CGI.pm
or mod_perl
.
2.3) Does PostgreSQL have a graphical user interface? A report generator?
2.3) Does PostgreSQL have a graphical user interface? A report generator?
An embedded query language interface?
An embedded query language interface?
We have a nice graphical user interface called
pga
ccess, which is
We have a nice graphical user interface called
PgA
ccess, which is
shipped as part of the distribution.
pga
ccess also has a report
shipped as part of the distribution.
PgA
ccess also has a report
generator. The Web page is http://www.
flex.ro/pgaccess
generator. The Web page is http://www.
pgaccess.org/.
We also include ecpg, which is an embedded SQL query language
We also include ecpg, which is an embedded SQL query language
interface for C.
interface for C.
2.4) What languages are a
vaila
ble to communicate with PostgreSQL?
2.4) What languages are able to communicate with PostgreSQL?
We have:
We have:
* C (libpq)
* C (libpq)
* C++ (libpq++)
* C++ (libpq++)
* Embedded C (ecpg)
* Embedded C (ecpg)
* Java (jdbc)
* Java (jdbc)
* Perl (
perl5
)
* Perl (
DBD::Pg
)
* ODBC (odbc)
* ODBC (odbc)
* Python (PyGreSQL)
* Python (PyGreSQL)
* TCL (libpgtcl)
* TCL (libpgtcl)
* C Easy API (libpgeasy)
* C Easy API (libpgeasy)
*
Embedded HTML (PHP from http://www.php.net
)
*
PHP ('pg_' functions, Pear::DB
)
Additional interfaces are available at
Additional interfaces are available at
http://www.
postgresql
.org/interfaces.html.
http://www.
PostgreSQL
.org/interfaces.html.
_________________________________________________________________
_________________________________________________________________
Administrative Questions
Administrative Questions
...
@@ -594,7 +596,7 @@
...
@@ -594,7 +596,7 @@
was 64, and changing it required a rebuild after altering the
was 64, and changing it required a rebuild after altering the
MaxBackendId constant in include/storage/sinvaladt.h.
MaxBackendId constant in include/storage/sinvaladt.h.
3.9) What are the pg_
sort
tempNNN.NN files in my database directory?
3.9) What are the pg_tempNNN.NN files in my database directory?
They are temporary files generated by the query executor. For example,
They are temporary files generated by the query executor. For example,
if a sort needs to be done to satisfy an ORDER BY, and the sort
if a sort needs to be done to satisfy an ORDER BY, and the sort
...
@@ -610,11 +612,11 @@
...
@@ -610,11 +612,11 @@
The PostgreSQL team makes only small changes between minor releases,
The PostgreSQL team makes only small changes between minor releases,
so upgrading from 7.2 to 7.2.1 does not require a dump and restore.
so upgrading from 7.2 to 7.2.1 does not require a dump and restore.
However, major releases
often change the internal format of system
However, major releases
(e.g. from 7.2 to 7.3) often change the
tables and data files. These changes are often complex, so we don't
internal format of system tables and data files. These changes are
maintain backward compatability for data files. A dump outputs data in
often complex, so we don't maintain backward compatability for data
a generic format that can then be loaded in using the new internal
files. A dump outputs data in a generic format that can then be loaded
format.
in using the new internal
format.
In releases where the on-disk format does not change, the pg_upgrade
In releases where the on-disk format does not change, the pg_upgrade
script can be used to upgrade without a dump/restore. The release
script can be used to upgrade without a dump/restore. The release
...
@@ -632,10 +634,10 @@
...
@@ -632,10 +634,10 @@
See the FETCH manual page, or use SELECT ... LIMIT....
See the FETCH manual page, or use SELECT ... LIMIT....
The entire query may have to be evaluated, even if you only want the
The entire query may have to be evaluated, even if you only want the
first few rows. Consider
a query that has an ORDER BY. If there is an
first few rows. Consider
using a query that has an ORDER BY. If there
i
ndex that matches the ORDER BY, PostgreSQL may be able to evaluate
i
s an index that matches the ORDER BY, PostgreSQL may be able to
only the first few records requested, or the entire query may have to
evaluate only the first few records requested, or the entire query may
be evaluated until the desired rows have been generated.
have to
be evaluated until the desired rows have been generated.
4.3) How do I get a list of tables or other things I can see in psql?
4.3) How do I get a list of tables or other things I can see in psql?
...
@@ -647,7 +649,8 @@
...
@@ -647,7 +649,8 @@
4.4) How do you remove a column from a table?
4.4) How do you remove a column from a table?
We do not support ALTER TABLE DROP COLUMN, but do this:
Prior to version 7.3, ALTER TABLE DROP COLUMN is not supported. You
can do this instead:
BEGIN;
BEGIN;
LOCK TABLE old_table;
LOCK TABLE old_table;
SELECT ... -- select all columns but the one you want to remove
SELECT ... -- select all columns but the one you want to remove
...
@@ -691,7 +694,7 @@
...
@@ -691,7 +694,7 @@
PostgreSQL database file containing this data can be estimated as 6.4
PostgreSQL database file containing this data can be estimated as 6.4
MB:
MB:
36 bytes: each row header (approximate)
36 bytes: each row header (approximate)
24 bytes: one int field and one text fi
le
d
24 bytes: one int field and one text fi
el
d
+ 4 bytes: pointer on page to tuple
+ 4 bytes: pointer on page to tuple
----------------------------------------
----------------------------------------
64 bytes per row
64 bytes per row
...
@@ -750,7 +753,7 @@
...
@@ -750,7 +753,7 @@
SELECT col
SELECT col
FROM tab
FROM tab
ORDER BY col [ DESC ]
ORDER BY col [ DESC ]
LIMIT 1
LIMIT 1
;
When using wild-card operators such as LIKE or ~, indexes can only be
When using wild-card operators such as LIKE or ~, indexes can only be
used in certain circumstances:
used in certain circumstances:
...
@@ -762,11 +765,11 @@
...
@@ -762,11 +765,11 @@
The search string can not start with a character class, e.g. [a-e].
The search string can not start with a character class, e.g. [a-e].
Case-insensitive searches
like ILIKE and ~* can not be used.
Case-insensitive searches
such as ILIKE and ~* do not utilise
Instead, use functional indexes, which are described later in this
indexes. Instead, use functional indexes, which are described in
FAQ
.
section 4.12
.
The default C local must be used during initdb.
The default C local
e
must be used during initdb.
4.9) How do I see how the query optimizer is evaluating my query?
4.9) How do I see how the query optimizer is evaluating my query?
...
@@ -812,11 +815,11 @@
...
@@ -812,11 +815,11 @@
Case-insensitive equality comparisons are normally expressed as:
Case-insensitive equality comparisons are normally expressed as:
SELECT *
SELECT *
FROM tab
FROM tab
WHERE
lower(col) = 'abc'
WHERE
LOWER(col) = 'abc';
This will not use an standard index. However, if you create a
This will not use an standard index. However, if you create a
functional index, it will be used:
functional index, it will be used:
CREATE INDEX tabindex
on tab (lower
(col));
CREATE INDEX tabindex
ON tab (LOWER
(col));
4.13) In a query, how do I detect if a field is NULL?
4.13) In a query, how do I detect if a field is NULL?
...
@@ -827,8 +830,8 @@
...
@@ -827,8 +830,8 @@
Type Internal Name Notes
Type Internal Name Notes
--------------------------------------------------
--------------------------------------------------
"char" char 1 character
"char" char 1 character
CHAR(
#
) bpchar blank padded to the specified fixed length
CHAR(
n
) bpchar blank padded to the specified fixed length
VARCHAR(
#
) varchar size specifies maximum length, no padding
VARCHAR(
n
) varchar size specifies maximum length, no padding
TEXT text no specific upper limit on length
TEXT text no specific upper limit on length
BYTEA bytea variable-length byte array (null-byte safe)
BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -841,8 +844,8 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -841,8 +844,8 @@ BYTEA bytea variable-length byte array (null-byte safe)
data types are also subject to compression or being stored out-of-line
data types are also subject to compression or being stored out-of-line
by TOAST, so the space on disk might also be less than expected.
by TOAST, so the space on disk might also be less than expected.
CHAR() is best when storing strings that are usually the same length.
CHAR(
n
) is best when storing strings that are usually the same length.
VARCHAR() is best when storing variable-length strings but it limits
VARCHAR(
n
) is best when storing variable-length strings but it limits
how long a string can be. TEXT is for strings of unlimited length,
how long a string can be. TEXT is for strings of unlimited length,
maximum 1 gigabyte. BYTEA is for storing binary data, particularly
maximum 1 gigabyte. BYTEA is for storing binary data, particularly
values that include NULL bytes.
values that include NULL bytes.
...
@@ -873,10 +876,10 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -873,10 +876,10 @@ BYTEA bytea variable-length byte array (null-byte safe)
One approach is to retrieve the next SERIAL value from the sequence
One approach is to retrieve the next SERIAL value from the sequence
object with the nextval() function before inserting and then insert it
object with the nextval() function before inserting and then insert it
explicitly. Using the example table in 4.15.1,
that might look like
explicitly. Using the example table in 4.15.1,
an example in a
this in Perl
:
pseudo-language would look like this
:
new_id =
output of "SELECT nextval('person_id_seq')"
new_id =
execute("SELECT nextval('person_id_seq')");
INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal'
);
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"
);
You would then also have the new value stored in new_id for use in
You would then also have the new value stored in new_id for use in
other queries (e.g., as a foreign key to the person table). Note that
other queries (e.g., as a foreign key to the person table). Note that
...
@@ -886,8 +889,8 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -886,8 +889,8 @@ BYTEA bytea variable-length byte array (null-byte safe)
Alternatively, you could retrieve the assigned SERIAL value with the
Alternatively, you could retrieve the assigned SERIAL value with the
currval() function after it was inserted by default, e.g.,
currval() function after it was inserted by default, e.g.,
INSERT INTO person (name) VALUES ('Blaise Pascal'
);
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"
);
new_id =
output of "SELECT currval('person_id_seq')"
;
new_id =
execute("SELECT currval('person_id_seq')")
;
Finally, you could use the OID returned from the INSERT statement to
Finally, you could use the OID returned from the INSERT statement to
look up the default value, though this is probably the least portable
look up the default value, though this is probably the least portable
...
@@ -898,7 +901,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -898,7 +901,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
4.15.3) Don't currval() and nextval() lead to a race condition with other
4.15.3) Don't currval() and nextval() lead to a race condition with other
users?
users?
No.
C
urrval() returns the current value assigned by your backend, not
No.
c
urrval() returns the current value assigned by your backend, not
by all users.
by all users.
4.15.4) Why aren't my sequence numbers reused on transaction abort? Why are
4.15.4) Why aren't my sequence numbers reused on transaction abort? Why are
...
@@ -912,7 +915,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -912,7 +915,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
OIDs are PostgreSQL's answer to unique row ids. Every row that is
OIDs are PostgreSQL's answer to unique row ids. Every row that is
created in PostgreSQL gets a unique OID. All OIDs generated during
created in PostgreSQL gets a unique OID. All OIDs generated during
initdb are less than 16384 (from
backend
/access/transam.h). All
initdb are less than 16384 (from
include
/access/transam.h). All
user-created OIDs are equal to or greater than this. By default, all
user-created OIDs are equal to or greater than this. By default, all
these OIDs are unique not only within a table or database, but unique
these OIDs are unique not only within a table or database, but unique
within the entire PostgreSQL installation.
within the entire PostgreSQL installation.
...
@@ -956,7 +959,8 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -956,7 +959,8 @@ BYTEA bytea variable-length byte array (null-byte safe)
* range variable, table name, table alias
* range variable, table name, table alias
A list of general database terms can be found at:
A list of general database terms can be found at:
http://www.comptechnews.com/~reaster/dbdesign.html
http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
/glossary.html
4.18) Why do I get the error "ERROR: Memory exhausted in AllocSetAlloc()"?
4.18) Why do I get the error "ERROR: Memory exhausted in AllocSetAlloc()"?
...
@@ -975,7 +979,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -975,7 +979,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
4.19) How do I tell what PostgreSQL version I am running?
4.19) How do I tell what PostgreSQL version I am running?
From psql, type
select
version();
From psql, type
SELECT
version();
4.20) Why does my large-object operations get "invalid large obj
4.20) Why does my large-object operations get "invalid large obj
descriptor"?
descriptor"?
...
@@ -1004,14 +1008,14 @@ CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
...
@@ -1004,14 +1008,14 @@ CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
If the subquery returns only a few rows and the outer query returns
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
many rows, IN is fastest. To speed up other queries, replace IN with
EXISTS:
EXISTS:
SELECT *
SELECT *
FROM tab
FROM tab
WHERE col IN (SELECT subcol FROM subtab)
WHERE col IN (SELECT subcol FROM subtab)
;
to:
to:
SELECT *
SELECT *
FROM tab
FROM tab
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)
;
For this to be fast, subcol should be an indexed column. We hope to
For this to be fast, subcol should be an indexed column. We hope to
fix this limitation in a future release.
fix this limitation in a future release.
...
@@ -1059,8 +1063,7 @@ SELECT *
...
@@ -1059,8 +1063,7 @@ SELECT *
4.25) How do I return multiple rows or columns from a function?
4.25) How do I return multiple rows or columns from a function?
You can return result sets from PL/pgSQL functions using refcursors.
You can return result sets from PL/pgSQL functions using refcursors.
See
See http://www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html,
http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html,
section 23.7.3.3.
section 23.7.3.3.
4.26) Why can't I reliably create/drop temporary tables in PL/PgSQL
4.26) Why can't I reliably create/drop temporary tables in PL/PgSQL
...
@@ -1079,19 +1082,19 @@ SELECT *
...
@@ -1079,19 +1082,19 @@ SELECT *
There are several master/slave replication options available. These
There are several master/slave replication options available. These
allow only the master to make database changes and the slave can only
allow only the master to make database changes and the slave can only
do database reads. The bottom of
do database reads. The bottom of
http://gborg.
postgresql
.org/genpage?replication_research lists them. A
http://gborg.
PostgreSQL
.org/genpage?replication_research lists them. A
multi-master replication solution is being worked on at
multi-master replication solution is being worked on at
http://gborg.
postgresql
.org/project/pgreplication/projdisplay.php.
http://gborg.
PostgreSQL
.org/project/pgreplication/projdisplay.php.
4.2
7
) What encryption options are available?
4.2
8
) What encryption options are available?
* /contrib/pgcrypto contains many encryption functions for use in
* /contrib/pgcrypto contains many encryption functions for use in
SQL queries.
SQL queries.
* The only way to encrypt transmission from the client to the server
* The only way to encrypt transmission from the client to the server
is by using hostssl in pg_hba.conf.
is by using hostssl in pg_hba.conf.
* Database user passwords are automatically encrypted when stored in
* Database user passwords are automatically encrypted when stored in
version 7.3. In previous versions, you must enable
version 7.3. In previous versions, you must enable
the option
password_encryption
in postgresql.conf.
PASSWORD_ENCRYPTION
in postgresql.conf.
* The server can run using an encrypted file system.
* The server can run using an encrypted file system.
_________________________________________________________________
_________________________________________________________________
...
...
doc/src/FAQ/FAQ.html
View file @
0896707e
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
alink=
"#0000ff"
>
alink=
"#0000ff"
>
<H1>
Frequently Asked Questions (FAQ) for PostgreSQL
</H1>
<H1>
Frequently Asked Questions (FAQ) for PostgreSQL
</H1>
<P>
Last updated:
Fri Oct 11 13:54
:56 EDT 2002
</P>
<P>
Last updated:
Sun Oct 13 22:49
:56 EDT 2002
</P>
<P>
Current maintainer: Bruce Momjian (
<A
href=
<P>
Current maintainer: Bruce Momjian (
<A
href=
"mailto:pgman@candle.pha.pa.us"
>
pgman@candle.pha.pa.us
</A>
)
<BR>
"mailto:pgman@candle.pha.pa.us"
>
pgman@candle.pha.pa.us
</A>
)
<BR>
...
@@ -22,15 +22,14 @@
...
@@ -22,15 +22,14 @@
<P>
The most recent version of this document can be viewed at
<A
<P>
The most recent version of this document can be viewed at
<A
href=
href=
"http://www.Postgre
sql
.org/docs/faq-english.html"
>
http://www.PostgreSQL.org/docs/faq-english.html
</A>
.
</P>
"http://www.Postgre
SQL
.org/docs/faq-english.html"
>
http://www.PostgreSQL.org/docs/faq-english.html
</A>
.
</P>
<P>
Platform-specific questions are answered at
<A
href=
<P>
Platform-specific questions are answered at
<A
href=
"http://www.PostgreSQL.org/users-lounge/docs/faq.html"
>
http://www.PostgreSQL.org/users-lounge/docs/faq.html
</A>
.
</P>
"http://www.PostgreSQL.org/users-lounge/docs/faq.html"
>
http://www.PostgreSQL.org/users-lounge/docs/faq.html
</A>
.
</P>
<HR>
<HR>
<H2
align=
"center"
>
General Questions
</H2>
<H2
align=
"center"
>
General Questions
</H2>
<A
href=
"#1.1"
>
1.1
</A>
) What is PostgreSQL? How is it
<A
href=
"#1.1"
>
1.1
</A>
) What is PostgreSQL? How is it pronounced?
<BR>
pronounced?
<BR>
<A
href=
"#1.2"
>
1.2
</A>
) What is the copyright on PostgreSQL?
<BR>
<A
href=
"#1.2"
>
1.2
</A>
) What is the copyright on PostgreSQL?
<BR>
<A
href=
"#1.3"
>
1.3
</A>
) What Unix platforms does PostgreSQL run
<A
href=
"#1.3"
>
1.3
</A>
) What Unix platforms does PostgreSQL run
on?
<BR>
on?
<BR>
...
@@ -161,7 +160,7 @@
...
@@ -161,7 +160,7 @@
<H2
align=
"center"
>
General Questions
</H2>
<H2
align=
"center"
>
General Questions
</H2>
<H4><A
name=
"1.1"
>
1.1
</A>
) What is PostgreSQL?
</H4>
<H4><A
name=
"1.1"
>
1.1
</A>
) What is PostgreSQL?
How is it pronounced?
</H4>
<P>
PostgreSQL is pronounced
<I>
Post-Gres-Q-L
</I>
.
</P>
<P>
PostgreSQL is pronounced
<I>
Post-Gres-Q-L
</I>
.
</P>
...
@@ -172,12 +171,12 @@
...
@@ -172,12 +171,12 @@
extended subset of
<SMALL>
SQL
</SMALL>
. PostgreSQL is free and the
extended subset of
<SMALL>
SQL
</SMALL>
. PostgreSQL is free and the
complete source is available.
</P>
complete source is available.
</P>
<P>
PostgreSQL development is performed by a team of
Internet
<P>
PostgreSQL development is performed by a team of
developers who all subscribe to the PostgreSQL development mailing
developers who all subscribe to the PostgreSQL development mailing
list. The current coordinator is Marc G. Fournier (
<A
href=
list. The current coordinator is Marc G. Fournier (
<A
href=
"mailto:scrappy@PostgreSQL.org"
>
scrappy@PostgreSQL.org
</A>
). (See
"mailto:scrappy@PostgreSQL.org"
>
scrappy@PostgreSQL.org
</A>
). (See
below on how to join). This team is now responsible for all
section
<a
href=
"#1.6"
>
1.6
</a>
on how to join). This team is now
development of PostgreSQL.
</P>
responsible for all
development of PostgreSQL.
</P>
<P>
The authors of PostgreSQL 1.01 were Andrew Yu and Jolly Chen.
<P>
The authors of PostgreSQL 1.01 were Andrew Yu and Jolly Chen.
Many others have contributed to the porting, testing, debugging,
Many others have contributed to the porting, testing, debugging,
...
@@ -239,10 +238,10 @@
...
@@ -239,10 +238,10 @@
<P><STRONG>
Client
</STRONG></P>
<P><STRONG>
Client
</STRONG></P>
<P>
It is possible to compile the
<I>
libpq
</I>
C library, psql, and
<P>
It is possible to compile the
<I>
libpq
</I>
C library, psql, and
other interfaces and
binaries to run on MS Windows platforms. In
other interfaces and
client applications to run on MS Windows platforms.
this case, the client is running on MS Windows, and communicates
In
this case, the client is running on MS Windows, and communicates
via TCP/IP to a server running on one of our supported Unix
via TCP/IP to a server running on one of our supported Unix
platforms. A file
<I>
win3
1
.mak
</I>
is included in the distribution
platforms. A file
<I>
win3
2
.mak
</I>
is included in the distribution
for making a Win32
<I>
libpq
</I>
library and
<I>
psql
</I>
. PostgreSQL
for making a Win32
<I>
libpq
</I>
library and
<I>
psql
</I>
. PostgreSQL
also communicates with
<SMALL>
ODBC
</SMALL>
clients.
</P>
also communicates with
<SMALL>
ODBC
</SMALL>
clients.
</P>
...
@@ -250,10 +249,11 @@
...
@@ -250,10 +249,11 @@
<P>
The database server can run on Windows NT and Win2k using
<P>
The database server can run on Windows NT and Win2k using
Cygwin, the Cygnus Unix/NT porting library. See
Cygwin, the Cygnus Unix/NT porting library. See
<I>
pgsql/doc/FAQ_MSWIN
</I>
in the distribution or the
<A
href=
<I>
pgsql/doc/FAQ_MSWIN
</I>
in the distribution or the MS Windows FAQ
"http://www.postgresql.org/docs/faq-mswin.html"
>
MS Windows FAQ
</A>
at
<A
href=
"http://www.PostgreSQL.org/docs/faq-mswin.html"
>
http://www.PostgreSQL.org/docs/faq-mswin.html
</A>
.
</P>
on our web site. We have no plan to do a native port to any
Microsoft platform.
</P>
<p>
A native port to some Microsoft platforms is currently being worked
upon.
</p>
<H4><A
name=
"1.5"
>
1.5
</A>
) Where can I get PostgreSQL?
</H4>
<H4><A
name=
"1.5"
>
1.5
</A>
) Where can I get PostgreSQL?
</H4>
...
@@ -318,7 +318,7 @@
...
@@ -318,7 +318,7 @@
'#PostgreSQL' "$USER" irc.phoenix.net.
</CODE></P>
'#PostgreSQL' "$USER" irc.phoenix.net.
</CODE></P>
<P>
A list of commercial support companies is available at
<A
href=
<P>
A list of commercial support companies is available at
<A
href=
"http://www.
postgresql.org/users-lounge/commercial-support.html"
>
http://www.postgresql
.org/users-lounge/commercial-support.html
</A>
.
</P>
"http://www.
PostgreSQL.org/users-lounge/commercial-support.html"
>
http://www.PostgreSQL
.org/users-lounge/commercial-support.html
</A>
.
</P>
<H4><A
name=
"1.7"
>
1.7
</A>
) What is the latest release?
</H4>
<H4><A
name=
"1.7"
>
1.7
</A>
) What is the latest release?
</H4>
...
@@ -339,10 +339,10 @@
...
@@ -339,10 +339,10 @@
"http://www.commandprompt.com/ppbook/"
>
http://www.commandprompt.com/ppbook/
</A>
.
"http://www.commandprompt.com/ppbook/"
>
http://www.commandprompt.com/ppbook/
</A>
.
There is a list of PostgreSQL books available for purchase at
<A
There is a list of PostgreSQL books available for purchase at
<A
href=
href=
"http://www.
postgresql.org/books/"
>
http://www.postgresql
.org/books/
</A>
.
"http://www.
ca.PostgreSQL.org/books/"
>
http://www.ca.PostgreSQL
.org/books/
</A>
.
There is also a collection of PostgreSQL technical articles at
<A
There is also a collection of PostgreSQL technical articles at
<A
href=
href=
"http://techdocs.
postgresql.org/"
>
http://techdocs.postgresql
.org/
</A>
.
</P>
"http://techdocs.
PostgreSQL.org/"
>
http://techdocs.PostgreSQL
.org/
</A>
.
</P>
<P><I>
psql
</I>
has some nice \d commands to show information about
<P><I>
psql
</I>
has some nice \d commands to show information about
types, operators, functions, aggregates, etc.
</P>
types, operators, functions, aggregates, etc.
</P>
...
@@ -402,10 +402,10 @@
...
@@ -402,10 +402,10 @@
<H4><A
name=
"1.13"
>
1.13
</A>
) How do I submit a bug report?
</H4>
<H4><A
name=
"1.13"
>
1.13
</A>
) How do I submit a bug report?
</H4>
<P>
Please visit the
<A
href=
<P>
Please visit the
PostgreSQL BugTool page at
<A
href=
"http://www.
postgresql.org/bugs/bugs.php"
>
PostgreSQL BugTool
</A>
"http://www.
PostgreSQL.org/bugs/bugs.php"
>
http://www.PostgreSQL.org/bugs/bugs.php
</A>
,
page,
which gives guidelines and directions on how to submit a
which gives guidelines and directions on how to submit a
bug.
</P>
bug
report
.
</P>
<P>
Also check out our ftp site
<A
href=
<P>
Also check out our ftp site
<A
href=
"ftp://ftp.PostgreSQL.org/pub"
>
ftp://ftp.PostgreSQL.org/pub
</A>
to
"ftp://ftp.PostgreSQL.org/pub"
>
ftp://ftp.PostgreSQL.org/pub
</A>
to
...
@@ -460,14 +460,14 @@
...
@@ -460,14 +460,14 @@
<DT><B>
Support
</B></DT>
<DT><B>
Support
</B></DT>
<DD>
Our mailing list
provides a large group of developers and
<DD>
Our mailing list
s provide contact with a large group of developers
users to help resolve any problems encountered. While we can
not
and users to help resolve any problems encountered. While we can
not
guarantee a fix, commercial
<SMALL>
DBMS
</SMALL>
s do not always
guarantee a fix, commercial
<SMALL>
DBMS
</SMALL>
s do not always
supply a fix either. Direct access to developers, the user
supply a fix either. Direct access to developers, the user
community, manuals, and the source code often make PostgreSQL
community, manuals, and the source code often make PostgreSQL
support superior to other
<SMALL>
DBMS
</SMALL>
s. There is
support superior to other
<SMALL>
DBMS
</SMALL>
s. There is
commercial per-incident support available for those who need it.
commercial per-incident support available for those who need it.
(See
<A
href=
"#1.6"
>
support FAQ item
</A>
.)
<BR>
(See
<A
href=
"#1.6"
>
FAQ section 1.6
</A>
.)
<BR>
<BR>
<BR>
</DD>
</DD>
...
@@ -484,7 +484,7 @@
...
@@ -484,7 +484,7 @@
PostgreSQL?
</H4>
PostgreSQL?
</H4>
<P>
PostgreSQL has had a first-class infrastructure since we started
<P>
PostgreSQL has had a first-class infrastructure since we started
six years ago
. This is all thanks to Marc Fournier, who has created
in 1994
. This is all thanks to Marc Fournier, who has created
and managed this infrastructure over the years.
</P>
and managed this infrastructure over the years.
</P>
<P>
Quality infrastructure is very important to an open-source
<P>
Quality infrastructure is very important to an open-source
...
@@ -494,9 +494,7 @@
...
@@ -494,9 +494,7 @@
<P>
Of course, this infrastructure is not cheap. There are a variety
<P>
Of course, this infrastructure is not cheap. There are a variety
of monthly and one-time expenses that are required to keep it
of monthly and one-time expenses that are required to keep it
going. If you or your company has money it can donate to help fund
going. If you or your company has money it can donate to help fund
this effort, please go to
<A
href=
this effort, please go to
<A
href=
"http://store.pgsql.com/shopping/"
>
http://store.pgsql.com/shopping/
</A>
"https://store.pgsql.com/shopping/index.php?id=1"
>
https://store.pgsql.com/shopping/index.php?id=1
</A>
and make a donation.
</P>
and make a donation.
</P>
<P>
Although the web page mentions PostgreSQL, Inc, the
<P>
Although the web page mentions PostgreSQL, Inc, the
...
@@ -538,28 +536,23 @@
...
@@ -538,28 +536,23 @@
<P>
A nice introduction to Database-backed Web pages can be seen at:
<P>
A nice introduction to Database-backed Web pages can be seen at:
<A
href=
"http://www.webreview.com"
>
http://www.webreview.com
</A></P>
<A
href=
"http://www.webreview.com"
>
http://www.webreview.com
</A></P>
<P>
There is also one at
<A
href=
"http://www.phone.net/home/mwm/hotlist/"
>
http://www.phone.net/home/mwm/hotlist/.
</A></P>
<P>
For Web integration, PHP is an excellent interface. It is at
<A
<P>
For Web integration, PHP is an excellent interface. It is at
<A
href=
"http://www.php.net"
>
http://www.php.net
</A>
.
</P>
href=
"http://www.php.net"
>
http://www.php.net
</A>
.
</P>
<P>
For complex cases, many use the Perl interface and CGI.pm.
</P>
<P>
For complex cases, many use the Perl interface and CGI.pm
or mod_perl
.
</P>
<H4><A
name=
"2.3"
>
2.3
</A>
) Does PostgreSQL have a graphical user
<H4><A
name=
"2.3"
>
2.3
</A>
) Does PostgreSQL have a graphical user
interface? A report generator? An embedded query language
interface? A report generator? An embedded query language
interface?
</H4>
interface?
</H4>
<P>
We have a nice graphical user interface called
<I>
pgaccess
</I>
,
<P>
We have a nice graphical user interface called PgAccess, which is
which is shipped as part of the distribution.
<I>
pgaccess
</I>
also
shipped as part of the distribution. PgAccess also has a report
has a report generator. The Web page is
<A
href=
generator. The Web page is
<A
href=
"http://www.pgaccess.org/"
>
http://www.pgaccess.org/
</A>
.
</P>
"http://www.flex.ro/pgaccess"
>
http://www.flex.ro/pgaccess
</A></P>
<P>
We also include
<I>
ecpg
</I>
, which is an embedded SQL query
<P>
We also include
<I>
ecpg
</I>
, which is an embedded SQL query
language interface for C.
</P>
language interface for C.
</P>
<H4><A
name=
"2.4"
>
2.4
</A>
) What languages are available to
<H4><A
name=
"2.4"
>
2.4
</A>
) What languages are able to communicate with PostgreSQL?
</H4>
communicate with PostgreSQL?
</H4>
<P>
We have:
</P>
<P>
We have:
</P>
...
@@ -572,7 +565,7 @@
...
@@ -572,7 +565,7 @@
<LI>
Java (jdbc)
</LI>
<LI>
Java (jdbc)
</LI>
<LI>
Perl (
perl5
)
</LI>
<LI>
Perl (
DBD::Pg
)
</LI>
<LI>
ODBC (odbc)
</LI>
<LI>
ODBC (odbc)
</LI>
...
@@ -582,12 +575,10 @@
...
@@ -582,12 +575,10 @@
<LI>
C Easy API (libpgeasy)
</LI>
<LI>
C Easy API (libpgeasy)
</LI>
<LI>
Embedded
<SMALL>
HTML
</SMALL>
(
<A
href=
<LI>
PHP ('pg_' functions, Pear::DB)
</LI>
"http://www.php.net"
>
PHP from http://www.php.net
</A>
)
</LI>
</UL>
</UL>
<P>
Additional interfaces are available at
<a
<P>
Additional interfaces are available at
href=
"http://www.postgresql.org/interfaces.html"
>
<a
href=
"http://www.PostgreSQL.org/interfaces.html"
>
http://www.PostgreSQL.org/interfaces.html
</A>
.
http://www.postgresql.org/interfaces.html.
</A>
</P>
</P>
<HR>
<HR>
...
@@ -774,7 +765,7 @@
...
@@ -774,7 +765,7 @@
the MaxBackendId constant in
the MaxBackendId constant in
<I>
include/storage/sinvaladt.h
</I>
.
</P>
<I>
include/storage/sinvaladt.h
</I>
.
</P>
<H4><A
name=
"3.9"
>
3.9
</A>
) What are the
<I>
pg_
sort
tempNNN.NN
</I>
<H4><A
name=
"3.9"
>
3.9
</A>
) What are the
<I>
pg_tempNNN.NN
</I>
files in my database directory?
</H4>
files in my database directory?
</H4>
<P>
They are temporary files generated by the query executor. For
<P>
They are temporary files generated by the query executor. For
...
@@ -793,16 +784,16 @@
...
@@ -793,16 +784,16 @@
<P>
The PostgreSQL team makes only small changes between minor releases,
<P>
The PostgreSQL team makes only small changes between minor releases,
so upgrading from 7.2 to 7.2.1 does not require a dump and restore.
so upgrading from 7.2 to 7.2.1 does not require a dump and restore.
However, major releases
often change the internal format of system
However, major releases
(e.g. from 7.2 to 7.3) often change the internal
tables and data files. These changes are often complex, so we don't
format of system tables and data files. These changes are often complex,
maintain backward compatability for data files. A dump outputs data
so we don't maintain backward compatability for data files. A dump outputs
in a generic format that can then be loaded in using the new internal
data
in a generic format that can then be loaded in using the new internal
format.
format.
</P>
<
P
>
In releases where the on-disk format does not change, the
<
p
>
In releases where the on-disk format does not change, the
<i>
pg_upgrade
</i>
script can be used to upgrade without a dump/restore.
<i>
pg_upgrade
</i>
script can be used to upgrade without a dump/restore.
The release notes mention whether
<i>
pg_upgrade
</i>
is available for the
The release notes mention whether
<i>
pg_upgrade
</i>
is available for the
release.
release.
</p>
<HR>
<HR>
...
@@ -821,7 +812,7 @@
...
@@ -821,7 +812,7 @@
<SMALL>
SELECT
</SMALL>
...
<SMALL>
LIMIT
</SMALL>
....
</P>
<SMALL>
SELECT
</SMALL>
...
<SMALL>
LIMIT
</SMALL>
....
</P>
<P>
The entire query may have to be evaluated, even if you only want
<P>
The entire query may have to be evaluated, even if you only want
the first few rows. Consider a query that has an
<SMALL>
ORDER
the first few rows. Consider
using
a query that has an
<SMALL>
ORDER
BY.
</SMALL>
If there is an index that matches the
<SMALL>
ORDER
BY.
</SMALL>
If there is an index that matches the
<SMALL>
ORDER
BY
</SMALL>
, PostgreSQL may be able to evaluate only the first few
BY
</SMALL>
, PostgreSQL may be able to evaluate only the first few
records requested, or the entire query may have to be evaluated
records requested, or the entire query may have to be evaluated
...
@@ -840,8 +831,8 @@
...
@@ -840,8 +831,8 @@
<H4><A
name=
"4.4"
>
4.4
</A>
) How do you remove a column from a
<H4><A
name=
"4.4"
>
4.4
</A>
) How do you remove a column from a
table?
</H4>
table?
</H4>
<P>
We do not support
<SMALL>
ALTER TABLE DROP COLUMN,
</SMALL>
but do
<P>
Prior to version 7.3,
<SMALL>
ALTER TABLE DROP COLUMN
</SMALL>
is not supported.
this
:
</P>
You can do this instead
:
</P>
<PRE>
<PRE>
BEGIN;
BEGIN;
LOCK TABLE old_table;
LOCK TABLE old_table;
...
@@ -892,7 +883,7 @@
...
@@ -892,7 +883,7 @@
be estimated as 6.4 MB:
</P>
be estimated as 6.4 MB:
</P>
<PRE>
<PRE>
36 bytes: each row header (approximate)
36 bytes: each row header (approximate)
24 bytes: one int field and one text fi
le
d
24 bytes: one int field and one text fi
el
d
+ 4 bytes: pointer on page to tuple
+ 4 bytes: pointer on page to tuple
----------------------------------------
----------------------------------------
64 bytes per row
64 bytes per row
...
@@ -957,7 +948,7 @@
...
@@ -957,7 +948,7 @@
SELECT col
SELECT col
FROM tab
FROM tab
ORDER BY col [ DESC ]
ORDER BY col [ DESC ]
LIMIT 1
LIMIT 1
;
</PRE>
</PRE>
<P>
When using wild-card operators such as
<SMALL>
LIKE
</SMALL>
or
<P>
When using wild-card operators such as
<SMALL>
LIKE
</SMALL>
or
...
@@ -972,10 +963,10 @@
...
@@ -972,10 +963,10 @@
</UL>
</UL>
<LI>
The search string can not start with a character class,
<LI>
The search string can not start with a character class,
e.g. [a-e].
</LI>
e.g. [a-e].
</LI>
<LI>
Case-insensitive searches
like
<SMALL>
ILIKE
</SMALL>
and
<LI>
Case-insensitive searches
such as
<SMALL>
ILIKE
</SMALL>
and
<I>
~*
</I>
can not be used.
Instead, use functional
<I>
~*
</I>
do not utilise indexes.
Instead, use functional
indexes, which are described
later in this FAQ
.
</LI>
indexes, which are described
in section
<a
href=
"#4.12"
>
4.12
</a>
.
</LI>
<LI>
The default
<I>
C
</I>
local must be used during
<LI>
The default
<I>
C
</I>
local
e
must be used during
<i>
initdb.
</i></LI>
<i>
initdb.
</i></LI>
</UL>
</UL>
<P>
<P>
...
@@ -1032,13 +1023,13 @@
...
@@ -1032,13 +1023,13 @@
<PRE>
<PRE>
SELECT *
SELECT *
FROM tab
FROM tab
WHERE
lower(col) = 'abc'
WHERE
LOWER(col) = 'abc';
</PRE>
</PRE>
This will not use an standard index. However, if you create a
This will not use an standard index. However, if you create a
functional index, it will be used:
functional index, it will be used:
<PRE>
<PRE>
CREATE INDEX tabindex
on tab (lower
(col));
CREATE INDEX tabindex
ON tab (LOWER
(col));
</PRE>
</PRE>
<H4><A
name=
"4.13"
>
4.13
</A>
) In a query, how do I detect if a field
<H4><A
name=
"4.13"
>
4.13
</A>
) In a query, how do I detect if a field
...
@@ -1053,8 +1044,8 @@
...
@@ -1053,8 +1044,8 @@
Type Internal Name Notes
Type Internal Name Notes
--------------------------------------------------
--------------------------------------------------
"char" char 1 character
"char" char 1 character
CHAR(
#
) bpchar blank padded to the specified fixed length
CHAR(
n
) bpchar blank padded to the specified fixed length
VARCHAR(
#
) varchar size specifies maximum length, no padding
VARCHAR(
n
) varchar size specifies maximum length, no padding
TEXT text no specific upper limit on length
TEXT text no specific upper limit on length
BYTEA bytea variable-length byte array (null-byte safe)
BYTEA bytea variable-length byte array (null-byte safe)
</PRE>
</PRE>
...
@@ -1069,8 +1060,8 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -1069,8 +1060,8 @@ BYTEA bytea variable-length byte array (null-byte safe)
stored out-of-line by
<SMALL>
TOAST
</SMALL>
, so the space on disk
stored out-of-line by
<SMALL>
TOAST
</SMALL>
, so the space on disk
might also be less than expected.
</P>
might also be less than expected.
</P>
<P><SMALL>
CHAR()
</SMALL>
is best when storing strings that are
<P><SMALL>
CHAR(
n
)
</SMALL>
is best when storing strings that are
usually the same length.
<SMALL>
VARCHAR()
</SMALL>
is best when
usually the same length.
<SMALL>
VARCHAR(
n
)
</SMALL>
is best when
storing variable-length strings but it limits how long a string can
storing variable-length strings but it limits how long a string can
be.
<SMALL>
TEXT
</SMALL>
is for strings of unlimited length, maximum
be.
<SMALL>
TEXT
</SMALL>
is for strings of unlimited length, maximum
1 gigabyte.
<SMALL>
BYTEA
</SMALL>
is for storing binary data,
1 gigabyte.
<SMALL>
BYTEA
</SMALL>
is for storing binary data,
...
@@ -1111,11 +1102,11 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -1111,11 +1102,11 @@ BYTEA bytea variable-length byte array (null-byte safe)
<P>
One approach is to retrieve the next
<SMALL>
SERIAL
</SMALL>
value
<P>
One approach is to retrieve the next
<SMALL>
SERIAL
</SMALL>
value
from the sequence object with the
<I>
nextval()
</I>
function
from the sequence object with the
<I>
nextval()
</I>
function
<I>
before
</I>
inserting and then insert it explicitly. Using the
<I>
before
</I>
inserting and then insert it explicitly. Using the
example table in
<A
href=
"#4.15.1"
>
4.15.1
</A>
,
that might look like
example table in
<A
href=
"#4.15.1"
>
4.15.1
</A>
,
an example in a
this in Perl
:
</P>
pseudo-language would look like this
:
</P>
<PRE>
<PRE>
new_id =
output of "SELECT nextval('person_id_seq')"
new_id =
execute("SELECT nextval('person_id_seq')");
INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal'
);
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"
);
</PRE>
</PRE>
You would then also have the new value stored in
You would then also have the new value stored in
...
@@ -1130,8 +1121,8 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -1130,8 +1121,8 @@ BYTEA bytea variable-length byte array (null-byte safe)
<SMALL>
SERIAL
</SMALL>
value with the
<I>
currval
</I>
() function
<SMALL>
SERIAL
</SMALL>
value with the
<I>
currval
</I>
() function
<I>
after
</I>
it was inserted by default, e.g.,
</P>
<I>
after
</I>
it was inserted by default, e.g.,
</P>
<PRE>
<PRE>
INSERT INTO person (name) VALUES ('Blaise Pascal'
);
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"
);
new_id =
output of "SELECT currval('person_id_seq')"
;
new_id =
execute("SELECT currval('person_id_seq')")
;
</PRE>
</PRE>
Finally, you could use the
<A
href=
"#4.16"
><SMALL>
OID
</SMALL></A>
Finally, you could use the
<A
href=
"#4.16"
><SMALL>
OID
</SMALL></A>
...
@@ -1144,7 +1135,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -1144,7 +1135,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
<H4><A
name=
"4.15.3"
>
4.15.3
</A>
) Don't
<I>
currval()
</I>
and
<H4><A
name=
"4.15.3"
>
4.15.3
</A>
) Don't
<I>
currval()
</I>
and
<I>
nextval()
</I>
lead to a race condition with other users?
</H4>
<I>
nextval()
</I>
lead to a race condition with other users?
</H4>
<P>
No.
Currval
() returns the current value assigned by your
<P>
No.
<i>
currval
</i>
() returns the current value assigned by your
backend, not by all users.
</P>
backend, not by all users.
</P>
<H4><A
name=
"4.15.4"
>
4.15.4
</A>
) Why aren't my sequence numbers
<H4><A
name=
"4.15.4"
>
4.15.4
</A>
) Why aren't my sequence numbers
...
@@ -1163,7 +1154,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -1163,7 +1154,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
Every row that is created in PostgreSQL gets a unique
Every row that is created in PostgreSQL gets a unique
<SMALL>
OID
</SMALL>
. All
<SMALL>
OID
</SMALL>
s generated during
<SMALL>
OID
</SMALL>
. All
<SMALL>
OID
</SMALL>
s generated during
<I>
initdb
</I>
are less than 16384 (from
<I>
initdb
</I>
are less than 16384 (from
<I>
backend
/access/transam.h
</I>
). All user-created
<I>
include
/access/transam.h
</I>
). All user-created
<SMALL>
OID
</SMALL>
s are equal to or greater than this. By default,
<SMALL>
OID
</SMALL>
s are equal to or greater than this. By default,
all these
<SMALL>
OID
</SMALL>
s are unique not only within a table or
all these
<SMALL>
OID
</SMALL>
s are unique not only within a table or
database, but unique within the entire PostgreSQL installation.
</P>
database, but unique within the entire PostgreSQL installation.
</P>
...
@@ -1186,12 +1177,11 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -1186,12 +1177,11 @@ BYTEA bytea variable-length byte array (null-byte safe)
COPY new TO '/tmp/pgtable';
COPY new TO '/tmp/pgtable';
DELETE FROM new;
DELETE FROM new;
COPY new WITH OIDS FROM '/tmp/pgtable';
COPY new WITH OIDS FROM '/tmp/pgtable';
</PRE>
<!--
<!--
CREATE TABLE new_table (mycol int);
CREATE TABLE new_table (mycol int);
INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table;
INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table;
-->
-->
</PRE>
<P>
O
<SMALL>
ID
</SMALL>
s are stored as 4-byte integers, and will
<P>
O
<SMALL>
ID
</SMALL>
s are stored as 4-byte integers, and will
overflow at 4 billion. No one has reported this ever happening, and
overflow at 4 billion. No one has reported this ever happening, and
we plan to have the limit removed before anyone does.
</P>
we plan to have the limit removed before anyone does.
</P>
...
@@ -1228,7 +1218,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -1228,7 +1218,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
</UL>
</UL>
<P>
A list of general database terms can be found at:
<A
href=
<P>
A list of general database terms can be found at:
<A
href=
"http://
www.comptechnews.com/~reaster/dbdesign.html"
>
http://www.comptechnews.com/~reaster/dbdesign
.html
</A></P>
"http://
hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html"
>
http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary
.html
</A></P>
<H4><A
name=
"4.18"
>
4.18
</A>
) Why do I get the error
<I>
"ERROR:
<H4><A
name=
"4.18"
>
4.18
</A>
) Why do I get the error
<I>
"ERROR:
Memory exhausted in AllocSetAlloc()"
</I>
?
</H4>
Memory exhausted in AllocSetAlloc()"
</I>
?
</H4>
...
@@ -1252,7 +1242,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -1252,7 +1242,7 @@ BYTEA bytea variable-length byte array (null-byte safe)
<H4><A
name=
"4.19"
>
4.19
</A>
) How do I tell what PostgreSQL version
<H4><A
name=
"4.19"
>
4.19
</A>
) How do I tell what PostgreSQL version
I am running?
</H4>
I am running?
</H4>
<P>
From
<I>
psql
</I>
, type
<CODE>
select
version();
</CODE></P>
<P>
From
<I>
psql
</I>
, type
<CODE>
SELECT
version();
</CODE></P>
<H4><A
name=
"4.20"
>
4.20
</A>
) Why does my large-object operations
<H4><A
name=
"4.20"
>
4.20
</A>
) Why does my large-object operations
get
<I>
"invalid large obj descriptor"
</I>
?
</H4>
get
<I>
"invalid large obj descriptor"
</I>
?
</H4>
...
@@ -1288,18 +1278,14 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -1288,18 +1278,14 @@ BYTEA bytea variable-length byte array (null-byte safe)
returns many rows,
<CODE><SMALL>
IN
</SMALL></CODE>
is fastest. To
returns many rows,
<CODE><SMALL>
IN
</SMALL></CODE>
is fastest. To
speed up other queries, replace
<CODE>
IN
</CODE>
with
speed up other queries, replace
<CODE>
IN
</CODE>
with
<CODE>
EXISTS
</CODE>
:
</P>
<CODE>
EXISTS
</CODE>
:
</P>
<PRE>
<PRE>
SELECT *
<CODE>
SELECT *
FROM tab
FROM tab
WHERE col IN (SELECT subcol FROM subtab)
WHERE col IN (SELECT subcol FROM subtab);
</CODE>
</PRE>
</PRE>
to:
to:
<PRE>
<PRE>
SELECT *
<CODE>
SELECT *
FROM tab
FROM tab
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
</CODE>
</PRE>
</PRE>
For this to be fast,
<CODE>
subcol
</CODE>
should be an indexed column.
For this to be fast,
<CODE>
subcol
</CODE>
should be an indexed column.
...
@@ -1362,8 +1348,8 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -1362,8 +1348,8 @@ BYTEA bytea variable-length byte array (null-byte safe)
<P>
You can return result sets from PL/pgSQL functions using
<P>
You can return result sets from PL/pgSQL functions using
<I>
refcursors
</I>
. See
<A
href=
<I>
refcursors
</I>
. See
<A
href=
"http://
developer.postgresql.org/docs/postgres/
plpgsql-cursors.html"
>
"http://
www.PostgreSQL.org/idocs/index.php?
plpgsql-cursors.html"
>
http://
developer.postgresql.org/docs/postgres/plpgsql-cursors.html,
</A>
http://
www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html
</A>
,
section 23.7.3.3.
</P>
section 23.7.3.3.
</P>
<H4><A
name=
"4.26"
>
4.26
</A>
) Why can't I reliably create/drop
<H4><A
name=
"4.26"
>
4.26
</A>
) Why can't I reliably create/drop
...
@@ -1381,13 +1367,12 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -1381,13 +1367,12 @@ BYTEA bytea variable-length byte array (null-byte safe)
<P>
There are several master/slave replication options available.
<P>
There are several master/slave replication options available.
These allow only the master to make database changes and the slave
These allow only the master to make database changes and the slave
can only do database reads. The bottom of
<a
can only do database reads. The bottom of
<a
href=
"http://gborg.
postgresql
.org/genpage?replication_research"
>
href=
"http://gborg.
PostgreSQL
.org/genpage?replication_research"
>
http://gborg.
postgresql
.org/genpage?replication_research
</a>
lists
http://gborg.
PostgreSQL
.org/genpage?replication_research
</a>
lists
them. A multi-master replication solution is being worked on at
<a
them. A multi-master replication solution is being worked on at
<a
href=
"http://gborg.postgresql.org/project/pgreplication/projdisplay.
href=
"http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php"
>
http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php
</a>
.
</P>
php"
>
http://gborg.postgresql.org/project/pgreplication/projdisplay.php
</a>
.
</P>
<H4><A
name=
"4.2
7"
>
4.27
</A>
) What encryption options are available?
<H4><A
name=
"4.2
8"
>
4.28
</A>
) What encryption options are available?
</H4>
</H4>
<UL>
<UL>
<LI><I>
/contrib/pgcrypto
</I>
contains many encryption functions for
<LI><I>
/contrib/pgcrypto
</I>
contains many encryption functions for
...
@@ -1395,8 +1380,8 @@ BYTEA bytea variable-length byte array (null-byte safe)
...
@@ -1395,8 +1380,8 @@ BYTEA bytea variable-length byte array (null-byte safe)
<LI>
The only way to encrypt transmission from the client to the
<LI>
The only way to encrypt transmission from the client to the
server is by using
<I>
hostssl
</I>
in
<I>
pg_hba.conf
</I>
.
</LI>
server is by using
<I>
hostssl
</I>
in
<I>
pg_hba.conf
</I>
.
</LI>
<LI>
Database user passwords are automatically encrypted when stored
<LI>
Database user passwords are automatically encrypted when stored
in version 7.3. In previous versions, you must enable
in version 7.3. In previous versions, you must enable
the option
<
I>
password_encryption
</I>
in
<I>
postgresql.conf
</I
>
.
</LI>
<
i>
PASSWORD_ENCRYPTION
</i>
in
<i>
postgresql.conf
</i
>
.
</LI>
<LI>
The server can run using an encrypted file system.
</LI>
<LI>
The server can run using an encrypted file system.
</LI>
</UL>
</UL>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment