- This is the first PostgreSQL release to natively run on Microsoft
- Windows as a server. It can run as a Windows service. This release
- supports NT-based Windows releases like Win2000, XP, Win2003.
- Older releases like Windows 95, 98, and ME are not supported because
- these operating systems do not have the infrastructure to
- support PostgreSQL. A separate installer project has been created
- to ease installation on Windows:
+ This is the first
PostgreSQL
+ release to natively run on Microsoft Windows as a server. It
+ can run as a Windows service. This release supports NT-based
+ Windows releases like Win2000, XP, Win2003. Older releases
+ like Windows 95, 98, and ME are not supported because these
+ operating systems do not have the infrastructure to support
+
PostgreSQL . A separate installer
+ project has been created to ease installation on Windows:
- http://pgfoundry.org/projects/pginstaller.
+ http://pgfoundry.org/projects/pginstaller.
Previous releases required the Unix emulation toolkit Cygwin for
- Win32 server support. PostgreSQL has always supported clients on Win32.
+ Win32 server support.
PostgreSQL
+ has always supported clients on Win32.
- Savepoints Improve Transaction Control
+ Savepoints
Savepoints allow specific parts of a transaction to be aborted
without affecting the remainder of the transaction. Prior
- releases had no such capability; there was no way to recover from
- a statement failure within a transaction except by aborting the whole
- transaction. This feature is valuable
- for application writers who require error recovery within a
- complex transaction.
+ releases had no such capability; there was no way to recover
+ from a statement failure within a transaction except by
+ aborting the whole transaction. This feature is valuable for
+ application writers who require error recovery within a
+ complex transaction.
- Point-In-Time Recovery Increases Reliability
+ Point-In-Time Recovery
- Though PostgreSQL is very reliable, in previous releases there
- was no way to recover from disk drive failure except to restore
- from a previous backup or use a standby replication server.
- Point-in-time recovery allows continuous backup of the server.
- You can recover either to the point of failure or to some
- transaction in the past.
+ Though
PostgreSQL is very reliable,
+ in previous releases there was no way to recover from disk
+ drive failure except to restore from a previous backup or use
+ a standby replication server. Point-in-time recovery allows
+ continuous backup of the server. You can recover either to
+ the point of failure or to some transaction in the past.
- Tablespaces Simplify Disk Layout
+ Tablespaces
- Tablespaces allow administrators
- to select the file systems used for storage of databases,
- schemas, tables, or indexes. This improves performance and
- control over disk space usage. Prior releases use d
- initlocation> and manual symlink management for such tasks.
+ Tablespaces allow administrators to select the file systems
+ used for storage of databases, schemas, tables, or
+ indexes. This improves performance and control over disk space
+
usage. Prior releases used initlocation> an d
+ manual symlink management for such tasks.
- Improved Buffer Management, CHECKPOINT, VACUUM
+ Improved Buffer Management, CHECKPOINT ,
+ VACUUM
- A column's data type can now be changed with ALTER TABLE.
+ A column's data type can now be changed with ALTER
+ TABLE.
A new version of the
plperl> server-side language now
- supports a persistent shared storage area, triggers, returning records
- and arrays of records, and SPI calls to access the database.
+ supports a persistent shared storage area, triggers, returning records
+ and arrays of records, and SPI calls to access the database.
- COPY Handles Comma-Separated-Value Files
+ CSV support in COPY
- COPY can now read and write comma-separated-value (CSV) files. It
- has the flexibility to interpret non-standard quoting and
- separation characters too.
+ COPY can now read and write
+ comma-separated-value (CSV) files. It has the flexibility to
+ interpret non-standard quoting and separation characters too.
Server configuration parameters SortMem> and
- VacuumMem> have been renamed to work_mem> and
- maintenance_work_mem> to better reflect their use. The
- original names are still supported in SET and SHOW.
+ VacuumMem> have been renamed to work_mem>
+ and maintenance_work_mem> to better reflect their
+ use. The original names are still supported in
+ SET and SHOW .
- The server now warns of empty strings passed to oid/float4/float8
- data types. In the next major release, doing this will generate an
+ The server now warns of empty strings passed to
+ oid /float4 /float8 data
+ types. In the next major release, doing this will generate an
error.
- EXECUTE now returns a completion tag that matches the executed
- statement.
+ EXECUTE now returns a completion tag that
+ matches the executed statement.
- Now that tablespaces have been implemented, initlocation has been
- removed.
+ Now that tablespaces have been implemented,
+
initlocation> has been removed.
ignored as well as leading whitespace (which has always been ignored).
-
-
- The 8.1 release will remove the function to_char(interval)
- .
-
-
+
+
Deprecated Features
+
+ Some aspects of
PostgreSQL 's behavior
+ have been determined to be suboptimal. For the sake of backward
+ compatibility these have not been removed in 8.0, but they are
+ considered deprecated and will be removed in the next major
+ release.
+
+
+
+
+ The 8.1 release will remove the function
+ to_char(interval) .
+
+
+
+
+ By default, tables in
PostgreSQL 8.0
+ and earlier are created with OIDs. In the next release, this
+ will not be the case: to create a table
+ that contains OIDs, the WITH OIDS clause must
+ be specified or the default_with_oids
+ configuration parameter must be enabled. Users are encouraged to
+ explicitely specify WITH OIDS if their tables
+ require OIDs for compatibility with future releases of
+
+
+
+
+
Changes
Add ability to prolong vacuum to reduce performance impact (Jan)
- On busy systems, VACUUM performs many I/O requests which can hurt
- performance for other users. This release allows you to slow down
- VACUUM to reduce its impact on other users, though this increases the
- total duration of VACUUM.
+ On busy systems, VACUUM performs many I/O
+ requests which can hurt performance for other users. This
+ release allows you to slow down VACUUM to
+ reduce its impact on other users, though this increases the
+ total duration of VACUUM .
- Add type-specific ANALYZE statistics capability (Mark Cave-Ayland)
+ Add type-specific ANALYZE statistics
+ capability (Mark Cave-Ayland)
This feature allows more flexibility in generating statistics
- Allow collection of ANALYZE statistics for expression indexes (Tom)
+ Allow collection of ANALYZE statistics for
+ expression indexes (Tom)
Expression indexes (also called functional indexes) allow users to
- New two-stage sampling method for ANALYZE (Manfred Koizar)
+ New two-stage sampling method for ANALYZE
+ (Manfred Koizar)
This gives better statistics for asymmetric data distributions.
- Speed up TRUNCATE (Tom)
+ Speed up TRUNCATE (Tom)
This buys back some of the performance loss observed in 7.4, while still
- keeping TRUNCATE transaction-safe.
+ keeping TRUNCATE transaction-safe.
- Allow DECLARE CURSOR to take parameters (Oliver Jowett)
+ Allow DECLARE CURSOR to take parameters
+ (Oliver Jowett)
- It is now useful to issue DECLARE CURSOR in a Parse message with
- parameters. The parameter values sent at Bind time will be substituted
- into the execution of the cursor's query.
+ It is now useful to issue DECLARE CURSOR in a
+ Parse message with parameters. The parameter values sent at
+ Bind time will be substituted into the execution of the cursor's
+ query.
- Fix hash joins and aggregates of INET and CIDR data types (Tom)
+ Fix hash joins and aggregates of inet and
+ cidr data types (Tom)
- Release 7.4 handled hashing of mixed INET and CIDR values incorrectly.
- (This bug did not exist in prior releases because they wouldn't try
- to hash either datatype.)
+ Release 7.4 handled hashing of mixed inet and
+ cidr values incorrectly. (This bug did not exist
+ in prior releases because they wouldn't try to hash either
+ datatype.)
- Allow BEGIN WORK to specify transaction isolation levels like START
- TRANSACTION (Bruce)
+ Allow BEGIN WORK to specify transaction
+ isolation levels like START TRANSACTION does
+ (Bruce)
- Change EXECUTE to return a completion tag matching the executed statement
- (Kris Jurka)
+ Change EXECUTE to return a completion tag
+ matching the executed statement (Kris Jurka)
- Previous releases return an EXECUTE tag for any EXECUTE call. In
- this release, the tag returned will reflect the command executed.
+ Previous releases return an EXECUTE tag for
+ any EXECUTE call. In this release, the tag
+ returned will reflect the command executed.
control whether tables are created with OIDs by default (Neil)
- This allows administrators to default all CREATE TABLE commands to
- create tables without OID columns.
+ This allows administrators to default all CREATE
+ TABLE commands to create tables without OID columns.
- Add WITH / WITHOUT OIDS clause to CREATE TABLE AS (Neil)
+ Add WITH / WITHOUT OIDS clause to CREATE TABLE
+ AS (Neil)
- Allow multiple ALTER actions in a single ALTER TABLE command (Rod)
+ Allow multiple ALTER actions in a single ALTER
+ TABLE command (Rod)
This is particularly useful for ALTER commands that rewrite the
- Allow ALTER TABLE to add SERIAL columns (Tom)
+ Allow ALTER TABLE to add serial
+ columns (Tom)
This is related to the new capability of adding defaults for new
- Allow CREATE SCHEMA to create triggers, indexes, and sequences (Neil)
+ Allow CREATE SCHEMA to create triggers,
+ indexes, and sequences (Neil)
- Add ALSO keyword to CREATE RULE (Fabien Coelho)
+ Add ALSO keyword to CREATE RULE (Fabien
+ Coelho)
This allows ALSO to be added to rule creation to contrast it with
- Add NOWAIT option to LOCK command (Tatsuo)
+ Add NOWAIT option to LOCK (Tatsuo)
- This allows the LOCK command to fail if it would have to wait for
- the requested lock.
+ This allows the LOCK command to fail if it
+ would have to wait for the requested lock.
- Allow COPY to read and write comma-separated-value (CSV) files (Andrew, Bruce)
+ Allow COPY to read and write
+ comma-separated-value (CSV) files (Andrew, Bruce)
- Generate error if the COPY delimiter and NULL string conflict (Bruce)
+ Generate error if the COPY delimiter and NULL
+ string conflict (Bruce)
- Avoid locking conflict between CREATE INDEX and CHECKPOINT (Tom)
+ Avoid locking conflict between CREATE INDEX
+ and CHECKPOINT (Tom)
In 7.3 and 7.4, a long-running btree index build could block concurrent
- Database-wide ANALYZE does not hold locks across tables (Tom)
+ Database-wide ANALYZE does not hold locks
+ across tables (Tom)
- This reduces the potential for deadlocks against other backends that
- want exclusive locks on tables. To get the benefit of this change,
- do not execute database-wide ANALYZE inside a transaction block
- (BEGIN block); it must be able to commit and start a new transaction
- for each table.
+ This reduces the potential for deadlocks against other backends
+ that want exclusive locks on tables. To get the benefit of this
+ change, do not execute database-wide ANALYZE
+ inside a transaction block (BEGIN block); it
+ must be able to commit and start a new transaction for each
+ table.
Erase MD5 user passwords when a user is renamed (Bruce)
- PostgreSQL uses the user name as salt when encrypting passwords
- via MD5. When a user name is changed, their salt no longer matches
- the stored MD5 password, so the stored password becomes useless.
- In this release a notice is generated and the password
- is cleared. A new password must then be assigned.
+
PostgreSQL uses the user name as salt
+ when encrypting passwords via MD5. When a user name is changed,
+ their salt no longer matches the stored MD5 password, so the
+ stored password becomes useless. In this release a notice is
+ generated and the password is cleared. A new password must then
+ be assigned.
Reject non-rectangular array literals as erroneous (Joe)
- Formerly, array_in would silently build a surprising result.
+ Formerly, array_in would silently build a
+ surprising result.
- Change factorial function to return NUMERIC (Gavin)
+ Change factorial function to return numeric (Gavin)
- Returning NUMERIC allows the factorial function to work for a wider
- range of input values.
+ Returning numeric allows the factorial function to
+ work for a wider range of input values.
- Better support for IEEE Infinity and NaN values in float4, float8 (Neil)
+ Better support for IEEE Infinity and NaN values in
+ float4 , float8 (Neil)
These should now work on all platforms that support IEEE-compliant
- Make psql \copy match COPY command syntax fully (Tom)
+ Make psql \copy match COPY command syntax
+ fully (Tom)
- Add CLUSTER information to psql \d display (Bruce)
+ Add CLUSTER information to psql \d display
+ (Bruce)
- Add global psql config file, psqlrc.sample (Bruce)
+ Add global psql config file, psqlrc.sample
+ (Bruce)
This allows a central file where global psql startup commands can
- Allow PQoidValue(), PQcmdTuples(), and PQoidStatus() to work
- on EXECUTE commands (Neil)
+ Allow PQoidValue(), PQcmdTuples(), and PQoidStatus() to work on
+ EXECUTE commands (Neil)
New "PostgreSQL" CVS tag (Marc)
- This was done to make it easier for organizations to manage their own
- copies of the PostgreSQL CVS repository. File version stamps from the
- master repository will not get munged by checking into or out of
- a copied repository.
+ This was done to make it easier for organizations to manage
+ their own copies of the
PostgreSQL
+ CVS repository. File version stamps from the master repository
+ will not get munged by checking into or out of a copied
+ repository.
- New /contrib/trgm, trigram matching for PostgreSQL (Teodor)
+ New /contrib/trgm, trigram matching for
This fixes a difficult-to-exploit security hole.
-
Avoid locking conflict between ANALYZE and LISTEN/NOTIFY
+
Avoid locking conflict between ANALYZE and LISTEN /NOTIFY
Numerous translation updates (various contributors)
Specifies the delay between activity rounds for the
- background writer. In each round the writer issues writes for some
- number of dirty buffers (controllable by the following parameters).
- The selected buffers will always be the
- least recently used ones among the currently dirty buffers.
- It then sleeps for bgwriter_delay milliseconds,
- and repeats.
- Note that on many systems, the effective resolution
- of sleep delays is 10 milliseconds; setting
- bgwriter_delay to a value that is
- not a multiple of 10 may have the same results as setting it
- to the next higher multiple of 10.
+ background writer. In each round the writer issues writes
+ for some number of dirty buffers (controllable by the
+ following parameters). The selected buffers will always be
+ the least recently used ones among the currently dirty
+ buffers. It then sleeps for bgwriter_delay>
+ milliseconds, and repeats. The default value is 200. Note
+ that on many systems, the effective resolution of sleep
+ delays is 10 milliseconds; setting bgwriter_delay>
+ to a value that is not a multiple of 10 may have the same
+ results as setting it to the next higher multiple of 10.
This option can only be set at server start or in the
postgresql.conf file.
bgwriter_percent (integer )
- In each round, no more than this percentage of the currently dirty
- buffers will be written (rounding up any fraction to the next whole
- number of buffers).
- This option can only be set at server start or in the
+ In each round, no more than this percentage of the currently
+ dirty buffers will be written (rounding up any fraction to
+ the next whole number of buffers). The default value is
+ 1. This option can only be set at server start or in the
postgresql.conf file.
bgwriter_maxpages (integer )
- In each round, no more than this many dirty buffers will be written.
- This option can only be set at server start or in the
+ In each round, no more than this many dirty buffers will be
+ written. The default value is 100. This option can only be
+ set at server start or in the
postgresql.conf file.
Smaller values of bgwriter_percent and
- bgwriter_maxpages reduce the extra I/O load caused by
- the background writer, but leave more work to be done at checkpoint
- time. To reduce load spikes at checkpoints, increase the values.
+ bgwriter_maxpages reduce the extra I/O load
+ caused by the background writer, but leave more work to be done
+ at checkpoint time. To reduce load spikes at checkpoints,
+ increase the values.
It is important for the command to return a zero exit status only if
- it succeeds. Examples:
+ it succeeds. Examples:
archive_command = 'cp "%p" /mnt/server/archivedir/"%f"'
archive_command = 'copy "%p" /mnt/server/archivedir/"%f"' # Win32
log_destination (string )
-
PostgreSQL supports several methods
- for logging server messages, including
- stderr and
- syslog . On Windows,
- eventlog is also supported. Set this
- option to a list of desired log destinations separated by
- commas. The default is to log to stderr
- only.
+
PostgreSQL supports several methods
+ for logging server messages, including
+ stderr and
+ syslog . On Windows,
+ eventlog is also supported. Set this
+ option to a list of desired log destinations separated by
+ commas. The default is to log to stderr
+ only.
This option can only be set at server start or in the
postgresql.conf configuration file.
redirect_stderr (boolean )
- This option allows messages sent to
stderr> to be
- captured and redirected into log files.
- This option, in combination with logging to
stderr>,
- is often more useful than
- logging to
syslog>, since some types of messages
- may not appear in
syslog> output (a common example
- is dynamic-linker failure messages).
- This option can only be set at server start.
+
This option allows messages sent to
stderr> to be
+ captured and redirected into log files.
+
This option, in combination with logging to
stderr>,
+ is often more useful than
+
logging to
syslog>, since some types of messages
+
may not appear in
syslog> output (a common example
+ is dynamic-linker failure messages).
+ This option can only be set at server start.
log_directory (string )
- When redirect_stderr> is enabled, this option
+ When redirect_stderr> is enabled, this option
determines the directory in which log files will be created.
- It may be specified as an absolute path, or relative to the
- cluster data directory.
+ It may be specified as an absolute path, or relative to the
+ cluster data directory.
This option can only be set at server start or in the
postgresql.conf configuration file.
log_filename_prefix (string )
- When redirect_stderr> is enabled, this option
+ When redirect_stderr> is enabled, this option
sets the prefix of the file names of the created log files.
- The postmaster PID and the current time are appended to this
- prefix to form an exact log file name.
+ The postmaster PID and the current time are appended to this
+ prefix to form an exact log file name.
This option can only be set at server start or in the
postgresql.conf configuration file.
log_rotation_age (integer )
- When redirect_stderr> is enabled, this option
- determines the maximum lifetime of an individual log file.
- After this many minutes have elapsed, a new log file will
- be created. Set to zero to disable time-based creation of
- new log files.
+ When redirect_stderr> is enabled, this option
+ determines the maximum lifetime of an individual log file.
+ After this many minutes have elapsed, a new log file will
+ be created. Set to zero to disable time-based creation of
+ new log files.
This option can only be set at server start or in the
postgresql.conf configuration file.
log_rotation_size (integer )
- When redirect_stderr> is enabled, this option
- determines the maximum size of an individual log file.
- After this many kilobytes have been emitted into a log file,
- a new log file will be created. Set to zero to disable size-based
- creation of new log files.
+ When redirect_stderr> is enabled, this option
+ determines the maximum size of an individual log file.
+ After this many kilobytes have been emitted into a log file,
+ a new log file will be created. Set to zero to disable size-based
+ creation of new log files.
This option can only be set at server start or in the
postgresql.conf configuration file.
the default is LOCAL0>. See also the
documentation of your system's
- This option can only be set at server start.
+ This option can only be set at server start.
syslog logs. The default is
postgres .
- This option can only be set at server start.
+ This option can only be set at server start.
terminals are disassociated (same effect as
postmaster>'s -S option).
The server's standard output and standard error are redirected
- to /dev/null>, so any messages sent to them will be lost.
- Unless
syslog> logging is selected or
- redirect_stderr> is enabled, using this option
+ to /dev/null>, so any messages sent to them will be lost.
+
Unless
syslog> logging is selected or
+ redirect_stderr> is enabled, using this option
is discouraged because it makes it impossible to see error messages.
log_line_prefix (string )
- This is a printf>-style string that is output at the
- beginning of each log line. The default is an empty string.
- Each recognized escape is replaced as outlined
- below - anything else that looks like an escape is ignored. Other
- characters are copied straight to the log line. Some escapes are
- only recognised by session processes, and do not apply to
- background processes such as the postmaster.
Syslog>
+ This is a printf>-style string that is output at the
+ beginning of each log line. The default is an empty string.
+ Each recognized escape is replaced as outlined
+ below - anything else that looks like an escape is ignored. Other
+ characters are copied straight to the log line. Some escapes are
+ only recognised by session processes, and do not apply to
+
background processes such as the postmaster.
Syslog>
produces its own
- timestamp and process ID information, so you probably do not want to
- use those escapes if you are using
syslog>.
- This option can only be set at server start or in the
+ timestamp and process ID information, so you probably do not want to
+
use those escapes if you are using
syslog>.
+ This option can only be set at server start or in the
postgresql.conf configuration file.
-
-
-
- |
- Escape
- Effect
- Session only
-
-
-
- |
- %u
- User Name
- Yes
-
- |
- %d
- Database Name
- Yes
-
- |
- %r
- Remote Hostname or IP address, and Remote Port
- Yes
-
- |
- %p
- Process ID
- No
-
- |
- %t
- Timestamp
- No
-
- |
- %i
- Command Tag. This is the command which generated the log
- line.
- Yes
-
- |
- %c
- Session ID. A unique identifier for each session.
- It is 2 4-byte hexadecimal numbers (without leading zeros)
+
+
+
+ |
+ Escape
+ Effect
+ Session only
+
+
+
+ |
+ %u
+ User Name
+ Yes
+
+ |
+ %d
+ Database Name
+ Yes
+
+ |
+ %r
+ Remote Hostname or IP address, and Remote Port
+ Yes
+
+ |
+ %p
+ Process ID
+ No
+
+ |
+ %t
+ Timestamp
+ No
+
+ |
+ %i
+ Command Tag. This is the command which generated the log
+ line.
+ Yes
+
+ |
+ %c
+ Session ID. A unique identifier for each session.
+ It is 2 4-byte hexadecimal numbers (without leading zeros)
separated by a dot. The numbers
- are the Session Start Time and the Process ID, so this can also
- be used as a space saving way of printing these items.
- Yes
-
- |
- %l
- Number of the log line for each process,
- starting at 1
- No
-
- |
- %s
- Session Start Timestamp
- Yes
-
- |
- %x
- Does not produce any output, but tells non-session
- processes to stop at this point in the string. Ignored by
- session processes.
- No
-
- |
- %%
- Literal %>
- No
-
-
-
-
+ are the Session Start Time and the Process ID, so this can also
+ be used as a space saving way of printing these items.
+ Yes
+
+ |
+ %l
+ Number of the log line for each process,
+ starting at 1
+ No
+
+ |
+ %s
+ Session Start Timestamp
+ Yes
+
+ |
+ %x
+ Does not produce any output, but tells non-session
+ processes to stop at this point in the string. Ignored by
+ session processes.
+ No
+
+ |
+ %%
+ Literal %>
+ No
+
+
+
+
The value for dynamic_library_path has to be a
list of absolute directory paths separated by colons (or semi-colons
- on Windows). If a list element starts
+ on Windows). If a list element starts
with the special string $libdir , the
compiled-in
PostgreSQL package
library directory is substituted for $libdir . This
Shows the locale in which sorting of textual data is done.
- See for more information.
- The value is determined when the database cluster is initialized.
+ See for more information.
+ The value is determined when the database cluster is initialized.
Shows the locale that determines character classifications.
- See for more information.
- The value is determined when the database cluster is initialized.
- Ordinarily this will be the same as lc_collate ,
- but for special applications it might be set differently.
+ See for more information.
+ The value is determined when the database cluster is initialized.
+ Ordinarily this will be the same as lc_collate ,
+ but for special applications it might be set differently.
variable is a variable not normally known
to
PostgreSQL proper but used by some
add-on module. Such variables must have names consisting of a class
- name, a dot, and a variable name. custom_variable_classes>
+ name, a dot, and a variable name. custom_variable_classes>
specifies all the class names in use in a particular installation.
This option can only be set at server start or in the
postgresql.conf configuration file.