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
88057d0c
Commit
88057d0c
authored
Sep 19, 2006
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update migration changes, more cleanups.
parent
dd18c579
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
784 additions
and
773 deletions
+784
-773
doc/src/sgml/release.sgml
doc/src/sgml/release.sgml
+784
-773
No files found.
doc/src/sgml/release.sgml
View file @
88057d0c
<!-- $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.43
8 2006/09/18 23:19:50
momjian Exp $ -->
<!-- $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.43
9 2006/09/19 00:57:07
momjian Exp $ -->
<!--
Typical markup:
...
...
@@ -11,9 +11,9 @@ PostgreSQL <productname>
pg_[A-Za-z0-9_] <application>
[A-Z][A-Z] <type>, <envar>, <literal>
non-ascii convert to & escapes
http://www.mountaindragon.com/html/iso.htm
encode multibytes as UTF8
http://www.pemberley.com/janeinfo/latin1.html#latexta
http://www.mountaindragon.com/html/iso.htm
encode multibytes as UTF8
http://www.pemberley.com/janeinfo/latin1.html#latexta
wrap long lines
For new features, add links to the documentation sections.
...
...
@@ -36,24 +36,19 @@ For new features, add links to the documentation sections.
<title>Overview</title>
<para>
Major changes in this release:
This release adds many improvements to commands and database
facilities that were requested by users. Rather than add a
few large new features, this release makes many features from
previous releases easier to use. For example, it is now much
easier to create standby point-in-time-recovery (PITR) servers.
Many performance bottlenecks have been eliminated, allowing
more functionality to be enabled by default. Various additions
will make porting from other databases easier. The changes
in this release continue the <productname>PostgreSQL</>
tradition of not only being the most advanced open source
database, but also the easiest to use.
</para>
<variablelist>
<varlistentry>
<term>
XX
</term>
<listitem>
<para>
XX
</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
...
...
@@ -71,1193 +66,1277 @@ For new features, add links to the documentation sections.
<itemizedlist>
<listitem>
<para>
XX
</para>
<para>
YYY
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Additional Changes</title>
<para>
Below you will find a detailed account of the additional
changes between <productname>PostgreSQL</productname> 8.2 and
the previous major release.
</para>
<sect3>
<title>Performance Improvements</title>
<itemizedlist>
<listitem>
<para>
Improve efficiency of <literal>IN</> (list-of-expressions)
clauses (Tom)
Improve cost estimation for nestloop index scans (Tom)
</para>
</listitem>
<listitem>
<para>
Reduce locking requirements of sequential scans (Qingqing
Zhou)
This may eliminate the need to set unrealistically small
values of <envar>random_page_cost</>. If you have been
using a very small <envar>random_page_cost</>, please
recheck your test cases.
</para>
</listitem>
<listitem>
<para>
Improve subtransaction performance (Alvaro, Itagaki Takahiro,
Tom)
Deprecate use of <application>postmaster</> symlink (Peter)
</para>
<para>
<application>postmaster</> and <application>postgres</>
commands now act identically, with the behavior determined
by switches. The <application>postmaster</> symlink is
kept for compatibility, but is not really needed.
</para>
</listitem>
<listitem>
<para>
Improve locking performance by breaking locks into sections
(Tom)
Change <envar>log_duration</> to output even if the query
is not output
(Tom)
</para>
<para>
This allows locking to be more fine-grained, reducing
contention
.
In prior releases, <envar>log_duration</> only printed if
the query appeared earlier in the logs
.
</para>
</listitem>
<listitem>
<para>
Allow the planner to re-order <literal>OUTER JOIN</>s when
possible
(Tom)
Make row comparisons follow <acronym>SQL</> standard
semantics and allow them to be used in index scans
(Tom)
</para>
<para>
This makes a considerable difference for queries involving
multiple outer joins.
Previously, row = and <> comparisons followed the
standard but < <= > >= did not. A row comparison
can now be used as an index constraint for a multicolumn
index matching the row value.
</para>
</listitem>
<listitem>
<para>
Improve planning of joins to inherited tables and <literal>UNION
ALL</> views (Tom)
Set <envar>escape_string_warning</> to <literal>on</> by
default (Bruce)
</para>
<para>
This issues a warning if backslash escapes are used in
non-escape (non-<literal>E''</>) strings.
</para>
</listitem>
<listitem>
<para>
Improve cost estimation for nestloop index scans (Tom)
Disallow aggregate functions in <command>UPDATE</> commands
(unless within a subquery) (Tom)
</para>
<para>
This may eliminate the need to set unrealistically small
values of <envar>random_page_cost</>. If you have been
using a very small <envar>random_page_cost</>, please
recheck your test cases.
The standard disallows this, and it leads to unpredictable
results.
</para>
</listitem>
<listitem>
<para>
Increase default values for <envar>shared_buffers</> and
<envar>max_fsm_pages</>(Andrew)
Change the row constructor syntax (<literal>ROW(...)</>)
so that list elements <literal>foo.*</> will be expanded
to a list of their member fields, rather than creating a
nested rowtype field as formerly (Tom)
</para>
</listitem>
<listitem>
<para>
Improve the optimizer statistics used by <literal>LIKE</>,
<literal>ILIKE</>, and regular expression operations (Tom)
The new behavior is substantially more useful since it
allows, for example, triggers to check for data changes
with <literal>IF row(new.*) IS DISTINCT FROM row(old.*)</>.
The old behavior is still available by omitting <literal>.*</>.
</para>
</listitem>
<listitem>
<para>
Allow constraint exclusion to be applied to inherited
<command>UPDATE</>/<command>DELETE</> queries (Tom
)
Have <command>SET CONSTRAINT</> affect only one constraint
(Kris Jurka
)
</para>
<para>
<command>SELECT</> already honored constraint exclusion.
In previous releases, <command>SET CONSTRAINT</> modified
all constraints with a matching name. In this release,
the schema search path is used to modify only the first
matching constraint. A schema specification is also
supported.
</para>
</listitem>
<listitem>
<para>
Improve sorting speed and reduce memory usage (Simon, Tom)
Remove rule permission for tables, for security reasons
(Tom)
</para>
</listitem>
<listitem>
<para>
<function>MIN()</>/<function>MAX()</> can now use indexes
in more cases (Tom)
In this release, only a table's owner can create or modify
rules for the table. For backwards compatibility,
<command>GRANT</>/<command>REVOKE RULE</> is still accepted,
but it does nothing.
</para>
</listitem>
<listitem>
<para>
Improve concurrency for database creation and destruction
(Tom)
Array comparison improvements (Tom)
</para>
</listitem>
<listitem>
<para>
Speed up vacuuming of btree indexes (Heikki Linnakangas,
Tom)
Now array dimensions are also compared.
</para>
</listitem>
<listitem>
<para>
Improve <command>COPY</> performance (Alon Goldshuv, Tom)
Change array concatenation to match documented behavior
(Tom)
</para>
<para>
This changes the previous behavior where concatenation
would adjust the lower array dimensions.
</para>
</listitem>
<listitem>
<para>
Add <literal>FILLFACTOR</> to table and index creation
(ITAGAKI Takahiro)
</para>
Have <function>to_char(time)</> and <function>to_char(interval)</>
treat <literal>'HH'</> and <literal>'HH12'</> as 12-hour
intervals.
<para>
This adds extra free space to each heap or index page,
allowing improved performance as the database grows. This
is particularly valuable to maintain <command>CLUSTER</>ing.
Most applications should use <literal>'HH24'</> unless they
want a 12-hour display.
</para>
</listitem>
<listitem>
<para>
Remove dead index entries before btree page split (Junji
Teramoto
)
Zero unmasked bits in conversion from <type>INET</> to
<type>CIDR</> (Tom
)
</para>
</listitem>
</sect3>
<sect3>
<title>Server Changes</title>
<itemizedlist>
<listitem>
<para>
Improve performance of statistics monitoring, especially
<literal>stats_command_string</> (Tom, Bruce
)
Remove <envar>australian_timezones</> configuration variable
(Joachim Wieland
)
</para>
<para>
This release sets <envar>stats_command_string</> to
<literal>on</> by default, now that its overhead is minimal.
This means <literal>pg_stat_activity</> now will show all
active queries by default.
No longer needed now that timezone abbreviations are
configurable.
</para>
</listitem>
<listitem>
<para>
Add support for include directives in <filename>postgresql.conf</>
(Joachim Wieland
)
Change <application>libpq</> <function>PQdsplen()</> to
return a useful value (Martijn van Oosterhout
)
</para>
</listitem>
<listitem>
<para>
Add native <acronym>LDAP</> authentication (Magnus Hagander)
Change <application>libpq</> <function>PQgetssl()</> to
return a <literal>void*</>, rather than <literal>SSL*</>
(Martijn van Oosterhout)
</para>
<para>
This is particularly useful for platforms that do no
t
support <acronym>PAM</>, such as Win32
.
This allows applications to use the function withou
t
<acronym>SSL</> headers
.
</para>
</listitem>
<listitem>
<para>
Re-enable <envar>full_page_writes</> (Tom
)
Remove <acronym>QNX</> and <acronym>BEOS</> ports (Bruce
)
</para>
<para>
This flag can now be used even with <acronym>PITR</>. It
is turned on automatically between <function>pg_start_backup()</>
and <function>pg_stop_backup()</> calls.
These ports no longer had active maintainers.
</para>
</listitem>
<listitem>
<para>
Add support for <acronym>SSL</> Certificate Revocation List
(<acronym>CRL</>) files, <filename>root.crl</> (Libor
Hohoš)
Make command-line options of postmaster and postgres
identical (Peter)
</para>
<para>
This was added to <application>libpq</> as well.
This allows the postmaster to pass arguments to each backend
without using <literal>-o</>.
</para>
</listitem>
<listitem>
<para>
Remove routine autovacuum server log entries (Bruce)
</para>
<para>
<literal>pg_stat_activity</> now shows autovacuum activity.
Remove /contrib/ora2pg, now at <ulink
url="http://www.samse.fr/GPL/ora2pg"></ulink>
</para>
</listitem>
<listitem>
<para>
Add <literal>GRANT CONNECT ON DATABASE</>, to be used in
addition to <filename>pg_hba.conf</> (Gevik Babakhani)
Remove contrib modules that have been migrated to pgfoundry:
adddepend, dbase, dbmirror, fulltextindex, mac, userlock
</para>
</listitem>
<listitem>
<para>
This gives SQL-control over database access, and works in
combination with the existing <filename>pg_hba.conf</>
controls.
Remove contrib abandoned modules: mSQL-interface, ips
</para>
</listitem>
<listitem>
<para>
Add last vacuum and analyze timestamp columns to the stats
collector (Larry Rosenman
)
In /contrib/xml2, rename <function>xml_valid()</> to
<function>xml_is_well_formed()</> (Tom
)
</para>
<para>
These values now appear in the <literal>pg_stat_*_tables</>
system views, and are used by autovacuum. ?
<function>xml_valid()</> will remain for backward compability,
but its behavior will change to do schema checks in future
releases.
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Changes</title>
<para>
Below you will find a detailed account of the additional
changes between <productname>PostgreSQL</productname> 8.2 and
the previous major release.
</para>
<sect3>
<title>Performance Improvements</title>
<itemizedlist>
<listitem>
<para>
Deprecate use of <application>postmaster</> symlink (Peter)
Improve efficiency of <literal>IN</> (list-of-expressions)
clauses (Tom)
</para>
</listitem>
<listitem>
<para>
<application>postmaster</> and <application>postgres</>
commands now act identically, with the behavior determined
by switches. The <application>postmaster</> symlink is
kept for compatibility, but is not really needed.
Reduce locking requirements of sequential scans (Qingqing
Zhou)
</para>
</listitem>
<listitem>
<para>
Add <acronym>GUC</> <envar>update_process_title</> to
control whether the <application>ps</> display is updated
for every command, default to <literal>on</> (Bruce)
Improve subtransaction performance (Alvaro, Itagaki Takahiro,
Tom)
</para>
</listitem>
<listitem>
<para>
Track tables needing vacuum with more accuracy (Alvaro)
Improve locking performance by breaking locks into sections
(Tom)
</para>
<para>
This reduces the overhead involved in preventing transaction
ID wraparound
.
This allows locking to be more fine-grained, reducing
contention
.
</para>
</listitem>
<listitem>
<para>
Allow units to be specified in configuration settings
(Peter
)
Allow the planner to re-order <literal>OUTER JOIN</>s when
possible (Tom
)
</para>
<para>
You can now set <envar>shared_buffer</> to <literal>32000kB</>,
for example
.
This makes a considerable difference for queries involving
multiple outer joins
.
</para>
</listitem>
<listitem>
<para>
Improve logging of protocol-level prepare/bind/execute
messages (Bruce,
Tom)
Improve planning of joins to inherited tables and <literal>UNION
ALL</> views (
Tom)
</para>
</listitem>
<listitem>
<para>
Such logging now shows statement names, bind parameter
values, and the text of the query being executed.
Increase default values for <envar>shared_buffers</> and
<envar>max_fsm_pages</>(Andrew)
</para>
</listitem>
<listitem>
<para>
Change <envar>log_duration</> to output even if the query
is not output
(Tom)
Improve the optimizer statistics used by <literal>LIKE</>,
<literal>ILIKE</>, and regular expression operations
(Tom)
</para>
</listitem>
<listitem>
<para>
In prior releases, <envar>log_duration</> only printed if
the query appeared earlier in the logs.
Allow constraint exclusion to be applied to inherited
<command>UPDATE</>/<command>DELETE</> queries (Tom)
</para>
</listitem>
<listitem>
<para>
Allow a forced switch to a new xlog file (Simon Riggs, Tom)
<command>SELECT</> already honored constraint exclusion.
</para>
</listitem>
<listitem>
<para>
This is valuable for keeping <acronym>PITR</> standby
servers in sync with the master. xlog file switching also
happens automatically during <function>pg_stop_backup()</>.
This ensures that <acronym>PITR</> servers have all xlog
files needed for recovery.
Improve sorting speed and reduce memory usage (Simon, Tom)
</para>
</listitem>
<listitem>
<para>
Add <acronym>WAL</> informational functions (Simon Riggs)
<function>MIN()</>/<function>MAX()</> can now use indexes
in more cases (Tom)
</para>
</listitem>
<listitem>
<para>
Add functions for interrogating the current xlog insertion
point and determining <acronym>WAL</> filenames from the
hex <acronym>WAL</> locations displayed by
<function>pg_stop_backup()</> and friends.
Improve concurrency for database creation and destruction
(Tom)
</para>
</listitem>
<listitem>
<para>
Allow <acronym>WAL</> replay to be restored quicker in case
of a crash (Simon Riggs
)
Speed up vacuuming of btree indexes (Heikki Linnakangas,
Tom
)
</para>
</listitem>
<listitem>
<para>
The server now does periodic checkpoints during <acronym>WAL</>
recovery, so if there is a crash, future <acronym>WAL</>
recovery is shortened. This also eliminates the need for
<acronym>PITR</> standby servers to replay the entire log
since the base backup if they crash.
Improve <command>COPY</> performance (Alon Goldshuv, Tom)
</para>
</listitem>
<listitem>
<para>
Add <envar>archive_timeout</> to force xlog file switches
at a given interval (Simon Riggs)
Add <literal>FILLFACTOR</> to table and index creation
(ITAGAKI Takahiro)
</para>
<para>
This adds extra free space to each heap or index page,
allowing improved performance as the database grows. This
is particularly valuable to maintain <command>CLUSTER</>ing.
</para>
</listitem>
<listitem>
<para>
This enforces a maximum delay for <acronym>PITR</> standby
servers.
Improve multicolumn <acronym>GIST</> indexing (Oleg, Teodor)
</para>
</listitem>
<listitem>
<para>
Add a <literal>waiting</> column to <literal>pg_stat_activity</>
(Tom)
<acronym>GIST</> indexes now are clusterable (Teodor)
</para>
</listitem>
<listitem>
<para>
This allows <literal>pg_stat_activity</> to show the same
information as the <literal>ps</> display.
Remove dead index entries before btree page split (Junji
Teramoto)
</para>
</listitem>
</sect3>
<sect3>
<title>
Query
Changes</title>
<title>
Server
Changes</title>
<itemizedlist>
<listitem>
<para>
Support portal parameters in <command>EXPLAIN</> and
<command>EXECUTE</> (Tom
)
Improve performance of statistics monitoring, especially
<literal>stats_command_string</> (Tom, Bruce
)
</para>
<para>
This allows, for example, <literal>?</> parameters to work
in these commands in <acronym>JDBC</>.
This release sets <envar>stats_command_string</> to
<literal>on</> by default, now that its overhead is minimal.
This means <literal>pg_stat_activity</> now will show all
active queries by default.
</para>
</listitem>
<listitem>
<para>
Add <literal>IS NOT DISTINCT FROM</> (Pavel Stehule)
Add support for include directives in <filename>postgresql.conf</>
(Joachim Wieland)
</para>
</listitem>
<listitem>
<para>
Add native <acronym>LDAP</> authentication (Magnus Hagander)
</para>
<para>
It is similar to equals (<literal>=</>), but is true when
both left and right arguments are <literal>NULL</>, and
false when just one is, rather than yielding <literal>NULL</>
in these cases.
This is particularly useful for platforms that do not
support <acronym>PAM</>, such as Win32.
</para>
</listitem>
<listitem>
<para>
Make row comparisons follow <acronym>SQL</> standard
semantics and allow them to be used in index scans
(Tom)
Allow <envar>full_page_writes</> to be turned <literal>off</>
again
(Tom)
</para>
<para>
Previously, row = and <> comparisons followed the
standard but < <= > >= did not. A row comparison
can now be used as an index constraint for a multicolumn
index matching the row value.
This flag can now be used even with <acronym>PITR</>. It
is turned on automatically between <function>pg_start_backup()</>
and <function>pg_stop_backup()</> calls.
</para>
</listitem>
<listitem>
<para>
Allow additional row values comparison (Tom)
Add support for <acronym>SSL</> Certificate Revocation List
(<acronym>CRL</>) files, <filename>root.crl</> (Libor
Hohoš)
</para>
<para>
Add <, <=, >, >=
.
This was added to <application>libpq</> as well
.
</para>
</listitem>
<listitem>
<para>
Add system view <literal>pg_prepared_statements</> to show
prepared statements (Joachim Wieland)
Remove routine autovacuum server log entries (Bruce)
</para>
<para>
<literal>pg_stat_activity</> now shows autovacuum activity.
</para>
</listitem>
<listitem>
<para>
Add system view <literal>pg_cursors</> to show open cursors
(Joachim Wieland
)
Add <literal>GRANT CONNECT ON DATABASE</>, to be used in
addition to <filename>pg_hba.conf</> (Gevik Babakhani
)
</para>
<para>
Both this and <literal>pg_prepared_statements</> are very
useful for pooled connection setups.
This gives SQL-control over database access, and works in
combination with the existing <filename>pg_hba.conf</>
controls.
</para>
</listitem>
<listitem>
<para>
If <acronym>SQL</>-level <command>PREPARE</> parameters
are unknown, infer their types from the context of the
query (Neil)
Add last vacuum and analyze timestamp columns to the stats
collector (Larry Rosenman)
</para>
<para>
These values now appear in the <literal>pg_stat_*_tables</>
system views, and are used by autovacuum. ?
</para>
</listitem>
<listitem>
<para>
Protocol-level <command>PREPARE</> already did this.
Add <acronym>GUC</> <envar>update_process_title</> to
control whether the <application>ps</> display is updated
for every command, default to <literal>on</> (Bruce)
</para>
</listitem>
<listitem>
<para>
Allow <command>UPDATE</> and <command>DELETE</> to use an
alias for the target table (Atsushi Ogawa)
Track tables needing vacuum with more accuracy (Alvaro)
</para>
<para>
This allows these statements to support self-joins more
conveniently. <command>UPDATE</> already supported as
<literal>FROM</> clause, but <command>DELETE</> did not.
This reduces the overhead involved in preventing transaction
ID wraparound.
</para>
</listitem>
<listitem>
<para>
Add <literal>CASCADE</> option to <command>TRUNCATE</>
(Joachim Wieland
)
Allow units to be specified in configuration settings
(Peter
)
</para>
<para>
This allows <command>TRUNCATE</> also to automatically
truncate all foreign-key referencing tables
.
You can now set <envar>shared_buffer</> to <literal>32000kB</>,
for example
.
</para>
</listitem>
<listitem>
<para>
Enable <envar>standard_conforming_strings</> to be turned
<literal>on</> (Kevin Grittner
)
Improve logging of protocol-level prepare/bind/execute
messages (Bruce, Tom
)
</para>
<para>
This allow special backslash escaping in strings to be
turned off so <productname>PostgreSQL</> is more
standards-compliant. The default is <literal>off</>, but
future releases will default this to <literal>on</>.
Such logging now shows statement names, bind parameter
values, and the text of the query being executed.
</para>
</listitem>
<listitem>
<para>
Set <envar>escape_string_warning</> to <literal>on</> by
default (Bruce)
Allow a forced switch to a new xlog file (Simon Riggs, Tom)
</para>
<para>
This issues a warning if backslash escapes are used in
non-escape (non-<literal>E''</>) strings.
This is valuable for keeping <acronym>PITR</> standby
servers in sync with the master. xlog file switching also
happens automatically during <function>pg_stop_backup()</>.
This ensures that <acronym>PITR</> servers have all xlog
files needed for recovery.
</para>
</listitem>
<listitem>
<para>
Support <literal>FOR UPDATE</> and <literal>FOR SHARE</>
in the same command (Tom)
Add <acronym>WAL</> informational functions (Simon Riggs)
</para>
<para>
Add functions for interrogating the current xlog insertion
point and determining <acronym>WAL</> filenames from the
hex <acronym>WAL</> locations displayed by
<function>pg_stop_backup()</> and friends.
</para>
</listitem>
<listitem>
<para>
Disallow aggregate functions in <command>UPDATE</> commands
(unless within a subquery) (Tom
)
Allow <acronym>WAL</> replay to be restored quicker in case
of a crash (Simon Riggs
)
</para>
<para>
The standard disallows this, and it leads to unpredictable
results.
The server now does periodic checkpoints during <acronym>WAL</>
recovery, so if there is a crash, future <acronym>WAL</>
recovery is shortened. This also eliminates the need for
<acronym>PITR</> standby servers to replay the entire log
since the base backup if they crash.
</para>
</listitem>
<listitem>
<para>
Change the row constructor syntax (<literal>ROW(...)</>)
so that list elements <literal>foo.*</> will be expanded
to a list of their member fields, rather than creating a
nested rowtype field as formerly (Tom)
Add <envar>archive_timeout</> to force xlog file switches
at a given interval (Simon Riggs)
</para>
<para>
The new behavior is substantially more useful since it
allows, for example, triggers to check for data changes
with <literal>IF row(new.*) IS DISTINCT FROM row(old.*)</>.
The old behavior is still available by omitting <literal>.*</>.
This enforces a maximum delay for <acronym>PITR</> standby
servers.
</para>
</listitem>
<listitem>
<para>
Change <literal>LIMIT</>/<literal>OFFSET</> to use
<type>int8</> (Dhanaraj M
)
Add a <literal>waiting</> column to <literal>pg_stat_activity</>
(Tom
)
</para>
<para>
This allows <literal>LIMIT</>/<literal>OFFSET</> over
two-billion
.
This allows <literal>pg_stat_activity</> to show the same
information as the <literal>ps</> display
.
</para>
</listitem>
</sect3>
<sect3>
<title>Query Changes</title>
<itemizedlist>
<listitem>
<para>
Add support for multi-row <literal>VALUES</> clauses as
part of <command>INSERT</> and <command>SELECT</> statements
(Joe, Tom)
Support portal parameters in <command>EXPLAIN</> and
<command>EXECUTE</> (Tom)
</para>
<para>
This allows <command>INSERT</> to insert multiple rows of
constants, or queries to generate result sets using constants.
For example, <literal>INSERT ... VALUES (...), (...),
....</>, and <literal>SELECT * FROM (VALUES (...), (...),
....) AS alias(f1, ...)</>.
This allows, for example, <literal>?</> parameters to work
in these commands in <acronym>JDBC</>.
</para>
</listitem>
<listitem>
<para>
Improve the length output used by
<literal>UNION</>/<literal>INTERSECT</>/<literal>EXCEPT</>
(Tom)
Add <literal>IS NOT DISTINCT FROM</> (Pavel Stehule)
</para>
<para>
When all columns are of the same defined length, that length
is used for output, rather than a generic length.
It is similar to equals (<literal>=</>), but is true when
both left and right arguments are <literal>NULL</>, and
false when just one is, rather than yielding <literal>NULL</>
in these cases.
</para>
</listitem>
<listitem>
<para>
Add <command>INSERT</>/<command>UPDATE</>/<command>DELETE</>
<literal>RETURNING</> (Jonah Harris, Tom)
Allow additional row value comparisons (Tom)
</para>
<para>
This allows these commands to return values, such as the
computed serial key for a new row. In the <command>UPDATE</>
case, values from the new state of the row are returned.
Add <, <=, >, >=.
</para>
</listitem>
<listitem>
<para>
Add system view <literal>pg_prepared_statements</> to show
prepared statements (Joachim Wieland)
</para>
</listitem>
<listitem>
<para>
Allow <command>UPDATE</> to set multiple columns with a
list of values (Susanne Ebrecht
)
Add system view <literal>pg_cursors</> to show open cursors
(Joachim Wieland
)
</para>
<para>
This is basically as short-hand for assigning the columns
and values in pairs. The syntax is <literal>UPDATE tab
SET (col, ...) = (val, ...)</>.
Both this and <literal>pg_prepared_statements</> are very
useful for pooled connection setups.
</para>
</listitem>
<listitem>
<para>
Allow <literal>ILIKE</> to work for multi-byte encodings
(Tom)
If <acronym>SQL</>-level <command>PREPARE</> parameters
are unknown, infer their types from the context of the
query (Neil)
</para>
<para>
Internally, <literal>ILIKE</> now calls <function>lower()</>
and then uses <literal>LIKE</>. Locale-specific regular
expression operations still do not work in these encodings.
Protocol-level <command>PREPARE</> already did this. ?
</para>
</listitem>
<listitem>
<para>
Protocol-level unnamed prepared statements are re-planned
for each set of <literal>BIND</> values (Tom
)
Allow <command>UPDATE</> and <command>DELETE</> to use an
alias for the target table (Atsushi Ogawa
)
</para>
<para>
This improves performance because the exact parameter values
can be used in the plan.
This allows these statements to support self-joins more
conveniently. <command>UPDATE</> already supported as
<literal>FROM</> clause, but <command>DELETE</> did not.
</para>
</listitem>
<listitem>
<para>
Do not flatten subqueries that contain <literal>VOLATIL
E</>
functions in their target lists (Jaime Casanova
)
Add <literal>CASCADE</> option to <command>TRUNCAT
E</>
(Joachim Wieland
)
</para>
<para>
This prevents surprising behavior due to multiple evaluation
of a <literal>volatile</> function (such as <function>random()</>
or <function>nextval()</>). It may cause performance
degradation in the presence of functions that are unnecessarily
marked as <literal>volatile</>.
This allows <command>TRUNCATE</> also to automatically
truncate all foreign-key referencing tables.
</para>
</sect3>
<sect3>
<title>Object Manipulation Changes</title>
<itemizedlist>
</listitem>
<listitem>
<para>
Add <command>DROP</> object <literal>IF EXISTS</> for many
object types (Andrew
)
Enable <envar>standard_conforming_strings</> to be turned
<literal>on</> (Kevin Grittner
)
</para>
<para>
This allows <command>DROP</> operations on non-existent
objects without generating an error.
This allow special backslash escaping in strings to be
turned off so <productname>PostgreSQL</> is more
standards-compliant. The default is <literal>off</>, but
future releases will default this to <literal>on</>.
</para>
</listitem>
<listitem>
<para>
Add <literal>DROP OWNED</> to drop all objects owned by a
role (Alvaro
)
Support <literal>FOR UPDATE</> and <literal>FOR SHARE</>
in the same command (Tom
)
</para>
</listitem>
<listitem>
<para>
Add <literal>REASSIGN OWNED</> to reassign ownership of
all objects owned by a role (Alvaro
)
Change <literal>LIMIT</>/<literal>OFFSET</> to exceed
two billion</> (Dhanaraj M
)
</para>
</listitem>
<listitem>
<para>
This, and <literal>DROP OWNED</> above, facilitate dropping
roles.
Add support for multi-row <literal>VALUES</> clauses as
part of <command>INSERT</> and <command>SELECT</> statements
(Joe, Tom)
</para>
</listitem>
<listitem>
<para>
Add <command>CREATE</>/<command>ALTER ROLE PASSWORD NULL</>,
which removes the role's password (Peter)
This allows <command>INSERT</> to insert multiple rows of
constants, or queries to generate result sets using constants.
For example, <literal>INSERT ... VALUES (...), (...),
....</>, and <literal>SELECT * FROM (VALUES (...), (...),
....) AS alias(f1, ...)</>.
</para>
</listitem>
<listitem>
<para>
Properly enforce <literal>DOMAIN</> check constraints
everywhere (Neil, Tom)
Improve the length output used by
<literal>UNION</>/<literal>INTERSECT</>/<literal>EXCEPT</>
(Tom)
</para>
<para>
For example, the result of a user-defined function that is
declared to return a domain type is now checked against
the constraints.
When all columns are of the same defined length, that length
is used for output, rather than a generic length.
</para>
</listitem>
<listitem>
<para>
Add <command>GRANT ON SEQUENCE</> syntax (Bruce)
Add <command>INSERT</>/<command>UPDATE</>/<command>DELETE</>
<literal>RETURNING</> (Jonah Harris, Tom)
</para>
<para>
This was added for setting sequence-specific permissions.
<literal>GRANT ON [TABLE]</> for sequences is still supported
for backward compatibility
.
This allows these commands to return values, such as the
computed serial key for a new row. In the <command>UPDATE</>
case, values from the new state of the row are returned
.
</para>
</listitem>
<listitem>
<para>
Add <literal>USAGE</> permission for sequences that allows
only <function>currval()</> and <function>nextval()</>,
not <function>setval()</> (Bruce)
Allow <command>UPDATE</> to set multiple columns with a
list of values (Susanne Ebrecht)
</para>
<para>
<literal>USAGE</> permission allows more find-grained
control over sequence access. It allows users to increment
a sequence, but prevents them from setting the sequence to
an arbitrary value using <function>setval()</>.
This is basically as short-hand for assigning the columns
and values in pairs. The syntax is <literal>UPDATE tab
SET (col, ...) = (val, ...)</>.
</para>
</listitem>
<listitem>
<para>
Allow comments on global objects to be stored globally
(Kris Jurka
)
Allow <literal>ILIKE</> to work for multi-byte encodings
(Tom
)
</para>
<para>
Previously, global object comments were stored in individual
databases, making them ineffective. This adds a new
<literal>pg_shdescription</> table
.
Internally, <literal>ILIKE</> now calls <function>lower()</>
and then uses <literal>LIKE</>. Locale-specific regular
expression operations still do not work in these encodings
.
</para>
</listitem>
<listitem>
<para>
Add <literal>ON COMMIT</> clauses to <command>CREATE TABLE
AS</> (Neil
)
Protocol-level unnamed prepared statements are re-planned
for each set of <literal>BIND</> values (Tom
)
</para>
<para>
This allows temporary tables to be truncated or dropped on
transaction commit. The default behavior is for the table
to remain until the session ends.
This improves performance because the exact parameter values
can be used in the plan.
</para>
</listitem>
<listitem>
<para>
Add <literal>TABLESPACE</> and <literal>ON COMMIT</> clauses
to <command>CREATE TABLE AS</> (Neil
)
Do not flatten subqueries that contain <literal>VOLATILE</>
functions in their target lists (Jaime Casanova
)
</para>
<para>
This allows the tablespace to be specified for the new
table.
This prevents surprising behavior due to multiple evaluation
of a <literal>volatile</> function (such as <function>random()</>
or <function>nextval()</>). It may cause performance
degradation in the presence of functions that are unnecessarily
marked as <literal>volatile</>.
</para>
</listitem>
</sect3>
<sect3>
<title>Object Manipulation Changes</title>
<itemizedlist>
<listitem>
<para>
Allow placeholder (shell) types to be created (Martijn van
Oosterhout
)
Add <command>DROP</> object <literal>IF EXISTS</> for many
object types (Andrew
)
</para>
<para>
Shell types create a type reference, without specifying
any of the aspects of the type. It is useful for creating
types with input/output functions that reference the data
type. The syntax is <command>CREATE TYPE typname</>.
This allows <command>DROP</> operations on non-existent
objects without generating an error.
</para>
</listitem>
<listitem>
<para>
Add new aggregate creation syntax (Tom)
Add <literal>DROP OWNED</> to drop all objects owned by a
role (Alvaro)
</para>
</listitem>
<listitem>
<para>
The new syntax is <command>CREATE AGGREGATE</> aggname
(input_type) (parameter_list). This more naturally supports
the new multi-parameter aggregate functionality. The
previous syntax is still supported.
Add <literal>REASSIGN OWNED</> to reassign ownership of
all objects owned by a role (Alvaro)
</para>
<para>
This, and <literal>DROP OWNED</> above, facilitate dropping
roles.
</para>
</listitem>
<listitem>
<para>
Aggregate functions now support multiple input parameters
(Sergey Koposov, Tom
)
Add <command>CREATE</>/<command>ALTER ROLE PASSWORD NULL</>,
which removes the role's password (Peter
)
</para>
</listitem>
<listitem>
<para>
Have <command>SET CONSTRAINT</> affect only one constraint
(Kris Jurka
)
Properly enforce <literal>DOMAIN</> check constraints
everywhere (Neil, Tom
)
</para>
<para>
In previous releases, <command>SET CONSTRAINT</> modified
all constraints with a matching name. In this release,
the schema search path is used to modify only the first
matching constraint. A schema specification is also
supported.
For example, the result of a user-defined function that is
declared to return a domain type is now checked against
the constraints.
</para>
</listitem>
<listitem>
<para>
Add <literal>INCLUDING CONSTRAINTS</> to <command>CREATE
TABLE LIKE</> (Greg Stark)
Add <command>GRANT ON SEQUENCE</> syntax (Bruce)
</para>
<para>
This allows the new table to receive matching constraints.
This was added for setting sequence-specific permissions.
<literal>GRANT ON [TABLE]</> for sequences is still supported
for backward compatibility.
</para>
</listitem>
<listitem>
<para>
Add <literal>ALTER TABLE ... [NO] INHERIT</> (Greg Stark)
Add <literal>USAGE</> permission for sequences that allows
only <function>currval()</> and <function>nextval()</>,
not <function>setval()</> (Bruce)
</para>
<para>
This allow inheritance to be added and removed dynamically,
rather than just at table creation and destruction. This
is very valuable for table partitioning using constraint
exclusion
.
<literal>USAGE</> permission allows more find-grained
control over sequence access. It allows users to increment
a sequence, but prevents them from setting the sequence to
an arbitrary value using <function>setval()</>
.
</para>
</listitem>
<listitem>
<para>
Remove rule permission for tables, for security reasons
(Tom
)
Allow comments on global objects to be stored globally
(Kris Jurka
)
</para>
<para>
In this release, only a table's owner can create or modify
rules for the table. For backwards compatibility,
<command>GRANT</>/<command>REVOKE RULE</> is still accepted,
but it does nothing.
Previously, global object comments were stored in individual
databases, making them ineffective. This adds a new
<literal>pg_shdescription</> table.
</para>
</sect3>
<sect3>
<title>Utility Command Changes</title>
<itemizedlist>
</listitem>
<listitem>
<para>
Reduce progress messages displayed by initdb (Tom)
Add <literal>ON COMMIT</> clauses to <command>CREATE TABLE
AS</> (Neil)
</para>
<para>
This allows temporary tables to be truncated or dropped on
transaction commit. The default behavior is for the table
to remain until the session ends.
</para>
</listitem>
<listitem>
<para>
Have initdb detect the operating system locale and set the
default <envar>DateStyle</> accordingly (Peter
)
Add <literal>TABLESPACE</> and <literal>ON COMMIT</> clauses
to <command>CREATE TABLE AS</> (Neil
)
</para>
<para>
This make it more likely that the installed
<filename>postgresql.conf</> <envar>DateStyle</> value will
be correct.
This allows the tablespace to be specified for the new
table.
</para>
</listitem>
<listitem>
<para>
Have the <command>COPY</> command return a command tag that
includes the number of rows copied (Volkan Yazıcı)
Allow placeholder (shell) types to be created (Martijn van
Oosterhout)
</para>
<para>
Shell types create a type reference, without specifying
any of the aspects of the type. It is useful for creating
types with input/output functions that reference the data
type. The syntax is <command>CREATE TYPE typname</>.
</para>
</listitem>
<listitem>
<para>
Allow <command>VACUUM</> to expire rows without being
affected by other concurrent <command>VACUUM</>s (Hannu
Krossing, Alvaro, Tom)
Add new aggregate creation syntax (Tom)
</para>
<para>
The new syntax is <command>CREATE AGGREGATE</> aggname
(input_type) (parameter_list). This more naturally supports
the new multi-parameter aggregate functionality. The
previous syntax is still supported.
</para>
</listitem>
<listitem>
<para>
Avoid extra scan of tables during <command>VACUUM</> of
index-less table (Greg Stark
)
Aggregate functions now support multiple input parameters
(Sergey Koposov, Tom
)
</para>
</listitem>
<listitem>
<para>
Add option to allow indexes to be created without blocking
concurrent writes to the table
(Greg Stark)
Add <literal>INCLUDING CONSTRAINTS</> to <command>CREATE
TABLE LIKE</>
(Greg Stark)
</para>
<para>
The new syntax is <command>CREATE INDEX CONCURRENTLY</>.
The default behavior is still to block table modification
while a index is being created.
This allows the new table to receive matching constraints.
</para>
</listitem>
<listitem>
<para>
Allow <command>COPY</> to dump a <command>SELECT</> query
(Zoltan Boszormenyi, Karel Zak)
Add <literal>ALTER TABLE ... [NO] INHERIT</> (Greg Stark)
</para>
<para>
This allows <command>COPY</> to dump arbitrary <acronym>SQL</>
queries. The syntax is <literal>COPY (SELECT ...) TO</>.
This allow inheritance to be added and removed dynamically,
rather than just at table creation and destruction. This
is very valuable for table partitioning using constraint
exclusion.
</para>
</listitem>
</sect3>
<sect3>
<title>
Data Type and Function
Changes</title>
<title>
Utility Command
Changes</title>
<itemizedlist>
<listitem>
<para>
Allow arrays to contain <literal>NULL</> elements
(Tom)
Reduce progress messages displayed by initdb
(Tom)
</para>
</listitem>
<listitem>
<para>
Change array concatenation to match documented behavior
(Tom
)
Have initdb detect the operating system locale and set the
default <envar>DateStyle</> accordingly (Peter
)
</para>
<para>
This changes the previous behavior where concatenation
would adjust the lower array dimensions.
This make it more likely that the installed
<filename>postgresql.conf</> <envar>DateStyle</> value will
be correct.
</para>
</listitem>
<listitem>
<para>
Array comparison improvements (Tom)
</para>
<para>
Now array dimensions are also compared.
Have the <command>COPY</> command return a command tag that
includes the number of rows copied (Volkan Yazıcı)
</para>
</listitem>
<listitem>
<para>
Allow <function>to_char(time)</> and <function>to_char(interval)</>
to output <acronym>AM</>/<acronym>PM</> specifications
(Bruce
)
Allow <command>VACUUM</> to expire rows without being
affected by other concurrent <command>VACUUM</>s (Hannu
Krossing, Alvaro, Tom
)
</para>
</listitem>
<listitem>
<para>
Intervals and times are treated as 24-hour periods, e.g.
<literal>25 hours</> is <acronym>AM</>.
Avoid extra scan of tables without indexes during <command>VACUUM</>
(Greg Stark)
</para>
</listitem>
<listitem>
<para>
Have <function>to_char(time)</> and <function>to_char(interval)</>
treat <literal>'HH'</> and <literal>'HH12'</> as 12-hour
intervals.
Add option to allow indexes to be created without blocking
concurrent writes to the table (Greg Stark)
</para>
<para>
Most applications should use <literal>'HH24'</> unless they
want a 12-hour display.
The new syntax is <command>CREATE INDEX CONCURRENTLY</>.
The default behavior is still to block table modification
while a index is being created.
</para>
</listitem>
<listitem>
<para>
Add a server-side sleep function <function>pg_sleep()</>
(Joachim Wieland)
Allow <command>COPY</> to dump a <command>SELECT</> query
(Zoltan Boszormenyi, Karel Zak)
</para>
<para>
This allows <command>COPY</> to dump arbitrary <acronym>SQL</>
queries. The syntax is <literal>COPY (SELECT ...) TO</>.
</para>
</listitem>
</sect3>
<sect3>
<title>Data Type and Function Changes</title>
<itemizedlist>
<listitem>
<para>
Zero unmasked bits in conversion from <type>INET</> to
<type>CIDR</> (Tom)
Allow arrays to contain <literal>NULL</> elements (Tom)
</para>
</listitem>
<listitem>
<para>
Add convenient arithmetic operations on <type>INET</>/<type>CIDR</>
values (Stephen R. van den Berg)
Allow <function>to_char(time)</> and <function>to_char(interval)</>
to output <acronym>AM</>/<acronym>PM</> specifications
(Bruce)
</para>
<para>
The new operators are <literal>&</> (and), <literal>|</>
(or), <literal>~</> (not), <literal>+</> <type>int8</>,
<literal>-</> <type>int8</>, and <type>inet</> <literal>-</>
<type>inet</>.
Intervals and times are treated as 24-hour periods, e.g.
<literal>25 hours</> is <acronym>AM</>.
</para>
</listitem>
<listitem>
<para>
Allow <function>to_char()</> to print localized month and
day names (Euler Taveira de Oliveira
)
Add a server-side sleep function <function>pg_sleep()</>
(Joachim Wieland
)
</para>
</listitem>
<listitem>
<para>
Add all comparison operators for the <type>tid</> data type
(Mark Kirkwood, Greg Stark, Tom)
Add convenient arithmetic operations on <type>INET</>/<type>CIDR</>
values (Stephen R. van den Berg)
</para>
<para>
The new operators are <literal>&</> (and), <literal>|</>
(or), <literal>~</> (not), <literal>+</> <type>int8</>,
<literal>-</> <type>int8</>, and <type>inet</> <literal>-</>
<type>inet</>.
</para>
</listitem>
<listitem>
<para>
Add new function <function>justify_interval()</> to adjust
interval units (Mark Dilger
)
Allow <function>to_char()</> to print localized month and
day names (Euler Taveira de Oliveira
)
</para>
</listitem>
<listitem>
<para>
Add new aggregate functions from SQL2003 (Neil)
Add all comparison operators for the <type>tid</> data type
(Mark Kirkwood, Greg Stark, Tom)
</para>
</listitem>
<listitem>
<para>
The new functions are <function>var_pop()</>,
<function>var_samp()</>, <function>stddev_pop()</>, and
<function>stddev_samp()</>. <function>var_samp()</> and
<function>stddev_samp()</> are merely renamings of the
existing aggregates <function>variance()</> and
<function>stddev()</>. The latter names have been kept
for backward compatibility.
Add new function <function>justify_interval()</> to adjust
interval units (Mark Dilger)
</para>
</listitem>
<listitem>
<para>
New operators for array-subset comparisons (<literal>@></>,
<literal><@</>, <literal>&&</>) (Teodor, Tom)
Add new aggregate functions from SQL2003 (Neil)
</para>
<para>
The old operators were kept for backward compatibility.
The new functions are <function>var_pop()</>,
<function>var_samp()</>, <function>stddev_pop()</>, and
<function>stddev_samp()</>. <function>var_samp()</> and
<function>stddev_samp()</> are merely renamings of the
existing aggregates <function>variance()</> and
<function>stddev()</>. The latter names have been kept
for backward compatibility.
</para>
</listitem>
<listitem>
<para>
Allow domains to be created using other domains (Tom)
New operators for array-subset comparisons (<literal>@></>,
<literal><@</>, <literal>&&</>) (Teodor, Tom)
</para>
</listitem>
<listitem>
<para>
Add <function>clock_timestamp()</>,
<function>statement_timestamp()</>, and
<function>transaction_timestamp()</> (Bruce)
The old operators were kept for backward compatibility.
</para>
</listitem>
<listitem>
<para>
<function>clock_timestamp()</> is the true current time,
and <function>statement_timestamp()</> is the time the
current command arrived at the server.
<function>transaction_timestamp()</> is the same as
<function>now()</>.
Allow domains to be created using other domains (Tom)
</para>
</listitem>
<listitem>
<para>
Allow full timezone names in <type>timestamp</> values
(Joachim Wieland)
Add <function>clock_timestamp()</>,
<function>statement_timestamp()</>, and
<function>transaction_timestamp()</> (Bruce)
</para>
<para>
For example, <literal>'2006-05-24 21:11
America/New_York'::timestamptz</>.
<function>clock_timestamp()</> is the true current time,
and <function>statement_timestamp()</> is the time the
current command arrived at the server.
<function>transaction_timestamp()</> is the same as
<function>now()</>.
</para>
</listitem>
<listitem>
<para>
Create a configuration file of timezone abbreviation
s
(Joachim Wieland)
Allow full timezone names in <type>timestamp</> value
s
(Joachim Wieland)
</para>
<para>
The file name is controlled by GUC variable
<envar>timezone_abbreviations
</>.
For example, <literal>'2006-05-24 21:11
America/New_York'::timestamptz
</>.
</para>
</listitem>
<listitem>
<para>
Remove <envar>australian_timezones</> configuration variable
(Joachim Wieland)
Create a configuration file of timezone abbreviations
(Joachim Wieland)
</para>
<para>
No longer needed now that timezone abbreviations ar
e
configurable
.
The file name is controlled by GUC variabl
e
<envar>timezone_abbreviations</>
.
</para>
</listitem>
<listitem>
<para>
Add <envar>pg_timezone_abbrevs</> and <envar>pg_timezone_names</>
views to show supported timezones (Magnus Hagander)
Add <envar>pg_timezone_abbrevs</> and <envar>pg_timezone_names</>
views to show supported timezones (Magnus Hagander)
</para>
</listitem>
<listitem>
<para>
Add SQL2003-standard statistical aggregates (Sergey Koposov)
Add SQL2003-standard statistical aggregates (Sergey Koposov)
</para>
<para>
New functions: <function>regr_intercept()</>,
<function>regr_slope()</>, <function>regr_r2()</>,
<function>corr()</>, <function>covar_samp()</>,
<function>covar_pop()</>, <function>regr_avgx()</>,
<function>regr_avgy()</>, <function>regr_sxy()</>,
<function>regr_sxx()</>, <function>regr_syy()</>,
<function>regr_count()</>
New functions: <function>regr_intercept()</>,
<function>regr_slope()</>, <function>regr_r2()</>,
<function>corr()</>, <function>covar_samp()</>,
<function>covar_pop()</>, <function>regr_avgx()</>,
<function>regr_avgy()</>, <function>regr_sxy()</>,
<function>regr_sxx()</>, <function>regr_syy()</>,
<function>regr_count()</>
</para>
</listitem>
<listitem>
<para>
Fix problems with dumping renamed <type>SERIAL</> columns
(Tom)
Fix problems with dumping renamed <type>SERIAL</> columns
(Tom)
</para>
<para>
The fix is to dump a <type>SERIAL</> column by explicitly
specifying its <literal>DEFAULT</> and sequence elements,
and reconstructing the <type>SERIAL</> column on reload
using a new <command>ALTER SEQUENCE OWNED BY</> command.
This also allows dropping a <type>SERIAL</> column
specification.
The fix is to dump a <type>SERIAL</> column by explicitly
specifying its <literal>DEFAULT</> and sequence elements,
and reconstructing the <type>SERIAL</> column on reload
using a new <command>ALTER SEQUENCE OWNED BY</> command.
This also allows dropping a <type>SERIAL</> column
specification.
</para>
</listitem>
<listitem>
<para>
Interval computation improvements (Michael Glaesemann,
Bruce)
Interval computation improvements (Michael Glaesemann,
Bruce)
</para>
</listitem>
</sect3>
<sect3>
...
...
@@ -1266,36 +1345,38 @@ For new features, add links to the documentation sections.
<listitem>
<para>
Allow <literal>FOR</> statements to return values to scalars
as well as records and row types (Pavel Stehule)
Allow <literal>FOR</> statements to return values to scalars
as well as records and row types (Pavel Stehule)
</para>
</listitem>
<listitem>
<para>
Add a <literal>BY</> clause to the <literal>FOR</> loop,
to control the iteration increment (Jaime Casanova)
Add a <literal>BY</> clause to the <literal>FOR</> loop,
to control the iteration increment (Jaime Casanova)
</para>
</listitem>
<listitem>
<para>
Add <literal>table_name</> and <literal>table_schema</> as
trigger data (Andrew)
Add <literal>table_name</> and <literal>table_schema</> as
trigger data (Andrew)
</para>
</listitem>
<listitem>
<para>
Add <literal>STRICT</> to <command>SELECT INTO</> (Matt
Miller)
Add <literal>STRICT</> to <command>SELECT INTO</> (Matt
Miller)
</para>
<para>
<literal>STRICT</> mode throws an exception if more or less
than one row is returned by the <command>SELECT</>, for
<productname>Oracle PL/SQL</> compatibility.
<literal>STRICT</> mode throws an exception if more or less
than one row is returned by the <command>SELECT</>, for
<productname>Oracle PL/SQL</> compatibility.
</para>
</listitem>
</sect3>
<sect3>
...
...
@@ -1304,36 +1385,38 @@ For new features, add links to the documentation sections.
<listitem>
<para>
Honor <envar>check_function_bodies</> (Tom)
Honor <envar>check_function_bodies</> (Tom)
</para>
</listitem>
<listitem>
<para>
Add prepared queries (Dmitry Karasik)
Add prepared queries (Dmitry Karasik)
</para>
</listitem>
<listitem>
<para>
Add <literal>table_name</> and <literal>table_schema</> as
trigger data (Adam Sjøgren)
Add <literal>table_name</> and <literal>table_schema</> as
trigger data (Adam Sjøgren)
</para>
<para>
<literal>relname</> is kept but now deprecated
<literal>relname</> is kept but now deprecated
</para>
</listitem>
<listitem>
<para>
Make <literal>$_TD</> trigger data a global variable (Andrew)
Make <literal>$_TD</> trigger data a global variable (Andrew)
</para>
<para>
Previously, it was lexical, which caused unexpected sharing
violations.
Previously, it was lexical, which caused unexpected sharing
violations.
</para>
</listitem>
</sect3>
<sect3>
...
...
@@ -1342,42 +1425,44 @@ For new features, add links to the documentation sections.
<listitem>
<para>
Allow functions to return <literal>void</> (Neil)
Allow functions to return <literal>void</> (Neil)
</para>
</listitem>
<listitem>
<para>
Add named parameters to the <literal>args[]</> array (Sven
Suursoho)
Add named parameters to the <literal>args[]</> array (Sven
Suursoho)
</para>
</listitem>
<listitem>
<para>
Return composite-types as dictionary (Sven Suursoho)
Return composite-types as dictionary (Sven Suursoho)
</para>
</listitem>
<listitem>
<para>
Return result-set as <literal>list</>, <literal>iterator</>,
or <literal>generator </>(Sven Suursoho)
Return result-set as <literal>list</>, <literal>iterator</>,
or <literal>generator </>(Sven Suursoho)
</para>
</listitem>
<listitem>
<para>
Allow returning of <literal>composite types</> and
<literal>result sets</> (Sven Suursoho)
Allow returning of <literal>composite types</> and
<literal>result sets</> (Sven Suursoho)
</para>
</listitem>
<listitem>
<para>
Add <literal>table_name</> and <literal>table_schema</> as
trigger data (Andrew)
Add <literal>table_name</> and <literal>table_schema</> as
trigger data (Andrew)
</para>
</listitem>
</sect3>
<sect3>
...
...
@@ -1386,98 +1471,100 @@ For new features, add links to the documentation sections.
<listitem>
<para>
Add new command <literal>\password</> for changing role
password with client-side password encryption (Peter)
Add new command <literal>\password</> for changing role
password with client-side password encryption (Peter)
</para>
</listitem>
<listitem>
<para>
Allow multi-line values to align in the proper column
(Martijn van Oosterhout)
Allow multi-line values to align in the proper column
(Martijn van Oosterhout)
</para>
</listitem>
<listitem>
<para>
Save multi-line statements as a single entry, rather than
one line at a time (Sergey E. Koposov)
Save multi-line statements as a single entry, rather than
one line at a time (Sergey E. Koposov)
</para>
<para>
This makes up-arrow recall of queries easier.
This makes up-arrow recall of queries easier.
</para>
</listitem>
<listitem>
<para>
Allow <literal>\c</> to connect to a new host and port
number (David, Volkan Yazıcı)
Allow <literal>\c</> to connect to a new host and port
number (David, Volkan Yazıcı)
</para>
</listitem>
<listitem>
<para>
Add option to run the entire session in a single transaction
(Simon)
Add option to run the entire session in a single transaction
(Simon)
</para>
<para>
Use options <literal>-1</> or <literal>--single-transaction</>.
Use options <literal>-1</> or <literal>--single-transaction</>.
</para>
</listitem>
<listitem>
<para>
Improve highlighting of error location in query in more
cases (Tom)
Improve highlighting of error location in query in more
cases (Tom)
</para>
</listitem>
<listitem>
<para>
Add tablespace display to <literal>\l+</> (Philip Yarra)
Add tablespace display to <literal>\l+</> (Philip Yarra)
</para>
</listitem>
<listitem>
<para>
Support binary <command>COPY</> (Andreas Pflug)
Support binary <command>COPY</> (Andreas Pflug)
</para>
</listitem>
<listitem>
<para>
Improve <literal>\df</> slash command to include the argument
names and modes (<literal>OUT</> or <literal>INOUT</>) of
the function (David Fetter)
Improve <literal>\df</> slash command to include the argument
names and modes (<literal>OUT</> or <literal>INOUT</>) of
the function (David Fetter)
</para>
</listitem>
<listitem>
<para>
Make the line counter 64-bit so it can handle files over
two billion lines (David Fetter)
Make the line counter 64-bit so it can handle files over
two billion lines (David Fetter)
</para>
</listitem>
<listitem>
<para>
Report both the returned data and the command status tag
for <command>INSERT</>/<command>UPDATE</>/<command>DELETE
RETURNING</> (Tom)
Report both the returned data and the command status tag
for <command>INSERT</>/<command>UPDATE</>/<command>DELETE
RETURNING</> (Tom)
</para>
</listitem>
<listitem>
<para>
Support retrieving <command>SELECT</> results in batches
using a cursor (Chris Mair)
Support retrieving <command>SELECT</> results in batches
using a cursor (Chris Mair)
</para>
<para>
This is accomplished using <command>\set FETCH_COUNT</>.
This is accomplished using <command>\set FETCH_COUNT</>.
</para>
</listitem>
</sect3>
<sect3>
...
...
@@ -1486,37 +1573,39 @@ For new features, add links to the documentation sections.
<listitem>
<para>
Allow complex selection of objects to be included or excluded
by <application>pg_dump</> (Greg Sabino Mullane)
Allow complex selection of objects to be included or excluded
by <application>pg_dump</> (Greg Sabino Mullane)
</para>
<para>
<application>pg_dump</> now supports multiple <literal>-n</>
(schema) and <literal>-t</> (table) options, and adds
<literal>-T</> and <literal>-N</> options to exclude objects.
Also adds support for regular expressions for object names
in these switches.
<application>pg_dump</> now supports multiple <literal>-n</>
(schema) and <literal>-t</> (table) options, and adds
<literal>-T</> and <literal>-N</> options to exclude objects.
Also adds support for regular expressions for object names
in these switches.
</para>
</listitem>
<listitem>
<para>
Add <application>pg_dump</> <literal>-X
no-data-for-failed-tables</> option to suppress loading
data if table creation failed (the table already exists)
(Martin Pitt)
Add <application>pg_dump</> <literal>-X
no-data-for-failed-tables</> option to suppress loading
data if table creation failed (the table already exists)
(Martin Pitt)
</para>
</listitem>
<listitem>
<para>
Add <application>pg_restore</> option to run the entire
session in a single transaction (Simon)
Add <application>pg_restore</> option to run the entire
session in a single transaction (Simon)
</para>
<para>
Use options <literal>-1</> or <literal>--single-transaction</>.
Use options <literal>-1</> or <literal>--single-transaction</>.
</para>
</listitem>
</sect3>
<sect3>
...
...
@@ -1525,68 +1614,51 @@ For new features, add links to the documentation sections.
<listitem>
<para>
Add <function>PQencryptPassword()</> to encrypt passwords
(Tom)
Add <function>PQencryptPassword()</> to encrypt passwords
(Tom)
</para>
<para>
This allows passwords to be sent encrypted for commands
like <command>ALTER USER ... PASSWORD</>.
This allows passwords to be sent encrypted for commands
like <command>ALTER USER ... PASSWORD</>.
</para>
</listitem>
<listitem>
<para>
Change <function>PQdsplen()</> to return a useful value
(Martijn van Oosterhout)
Allow the <filename>.pgpass</> hostname to match the default
socket directory, as well as a blank <literal>pghost</>
(Bruce)
</para>
</listitem>
<listitem>
<para>
Change <function>PQgetssl()</> to return a <literal>void*</>,
rather than <literal>SSL*</> (Martijn van Oosterhout)
Add function <function>PQisthreadsafe()</> (Bruce)
</para>
<para>
This allows applications to use the function without
<acronym>SSL</> headers
.
This allows applications to query the thread-safety status
of the library
.
</para>
</listitem>
<listitem>
<para>
Allow the <filename>.pgpass</> hostname to match the default
socket directory, as well as a blank <literal>pghost</>
(Bruce)
</para>
</listitem>
<listitem>
<para>
Add function <function>PQisthreadsafe()</> (Bruce)
</para>
<para>
This allows applications to query the thread-safety status
of the library.
Allow <acronym>LDAP</> lookups from <filename>pg_service.conf</>
(Albe Laurenz)
</para>
</listitem>
<listitem>
<para>
Allow <acronym>LDAP</> lookups from <filename>pg_service.conf</>
(Albe Laurenz)
Add <function>PQdescribePrepared()</>,
<function>PQdescribePortal()</>, and related functions
return information about previously prepared statements
and open cursors (Volkan Yazıcı)
</para>
</listitem>
<listitem>
<para>
Add <function>PQdescribePrepared()</>,
<function>PQdescribePortal()</>, and related functions
return information about previously prepared statements
and open cursors (Volkan Yazıcı)
</para>
</sect3>
<sect3>
...
...
@@ -1595,27 +1667,29 @@ For new features, add links to the documentation sections.
<listitem>
<para>
Allow <command>SHOW</> to put its result into a variable
(Joachim Wieland)
Allow <command>SHOW</> to put its result into a variable
(Joachim Wieland)
</para>
</listitem>
<listitem>
<para>
Add <command>COPY TO STDOUT</> (Joachim Wieland)
Add <command>COPY TO STDOUT</> (Joachim Wieland)
</para>
</listitem>
<listitem>
<para>
Add regression tests (Joachim Wieland, Michael)
Add regression tests (Joachim Wieland, Michael)
</para>
</listitem>
<listitem>
<para>
Major source code cleanups (Joachim Wieland, Michael)
Major source code cleanups (Joachim Wieland, Michael)
</para>
</listitem>
</sect3>
<sect3>
...
...
@@ -1624,52 +1698,54 @@ For new features, add links to the documentation sections.
<listitem>
<para>
Improve handling of intermittent file system and resource
failures (Qingqing Zhou)
Improve handling of intermittent file system and resource
failures (Qingqing Zhou)
</para>
</listitem>
<listitem>
<para>
Stability fixes (Magnus)
Stability fixes (Magnus)
</para>
<para>
Particularly, prevent the postmaster from stopping if too
many connection requests arrive too rapidly.
Particularly, prevent the postmaster from stopping if too
many connection requests arrive too rapidly.
</para>
</listitem>
<listitem>
<para>
Add support for Windows code pages <literal>1253</>,
<literal>1254</>, <literal>1255</>, and <literal>1257</>
(Kris Jurka)
Add support for Windows code pages <literal>1253</>,
<literal>1254</>, <literal>1255</>, and <literal>1257</>
(Kris Jurka)
</para>
</listitem>
<listitem>
<para>
Allow <acronym>MSVC</> to compile the <productname>PostgreSQL</>
server (Magnus, Hiroshi Saito)
Allow <acronym>MSVC</> to compile the <productname>PostgreSQL</>
server (Magnus, Hiroshi Saito)
</para>
</listitem>
<listitem>
<para>
Add <acronym>MSVC</> support for utility commands and
<application>pg_dump </>(Hiroshi Saito)
Add <acronym>MSVC</> support for utility commands and
<application>pg_dump </>(Hiroshi Saito)
</para>
</listitem>
<listitem>
<para>
Add native semaphore implementation (Qingqing Zhou)
Add native semaphore implementation (Qingqing Zhou)
</para>
<para>
Previous implementations mimicked SysV semaphores.
Previous implementations mimicked SysV semaphores.
</para>
</listitem>
</sect3>
<sect3>
...
...
@@ -1678,215 +1754,183 @@ For new features, add links to the documentation sections.
<listitem>
<para>
Remove R-tree indexing (Tom)
Remove R-tree indexing (Tom)
</para>
<para>
Rtree has been re-implemented using <acronym>GIST</>.
Rtree has been re-implemented using <acronym>GIST</>.
</para>
</listitem>
<listitem>
<para>
Reduce libraries linked into the backend needlessly (Martijn
van Oosterhout, Tom)
Reduce libraries linked into the backend needlessly (Martijn
van Oosterhout, Tom)
</para>
</listitem>
<listitem>
<para>
New macro <literal>PG_VERSION_NUM</> for use by third-party
applications wanting to test the backend version in C using
> and < comparisons (Bruce)
</para>
</listitem>
<listitem>
<para>
Improve multicolumn <acronym>GIST</> indexing (Oleg, Teodor)
</para>
</listitem>
<listitem>
<para>
<acronym>GIST</> indexes now are clusterable (Teodor)
</para>
</listitem>
<listitem>
<para>
Add a configure flag to allow libedit to be preferred over
<acronym>GNU</> readline (Bruce)
</para>
<para>
Use configure <literal>--with-libedit-preferred</>.
New macro <literal>PG_VERSION_NUM</> for use by third-party
applications wanting to test the backend version in C using
> and < comparisons (Bruce)
</para>
</listitem>
<listitem>
<para>
Allow installation into directories containing spaces
(Peter
)
Add a configure flag to allow libedit to be preferred over
<acronym>GNU</> readline (Bruce
)
</para>
</listitem>
<listitem>
<para>
Improve ability to relocate installs in more complex
configurations (Tom)
Use configure <literal>--with-libedit-preferred</>.
</para>
</listitem>
<listitem>
<para>
Add support for <productname>Solaris x86_64</> using the
<productname>Solaris</> compiler (Pierre Girard, Theo
Schlossnagle, Bruce)
Allow installation into directories containing spaces
(Peter)
</para>
</listitem>
<listitem>
<para>
Remove <acronym>QNX</> and <acronym>BEOS</> ports (Bruce)
</para>
<para>
These ports no longer had active maintainers.
Improve ability to relocate installs in more complex
configurations (Tom)
</para>
</listitem>
<listitem>
<para>
Make command-line options of postmaster and postgres
identical (Peter)
</para>
<para>
This allows the postmaster to pass arguments to each backend
without using <literal>-o</>.
Add support for <productname>Solaris x86_64</> using the
<productname>Solaris</> compiler (Pierre Girard, Theo
Schlossnagle, Bruce)
</para>
</listitem>
<listitem>
<para>
Add <literal>XLOG_BLCKSZ</> as independent from <literal>BLCKSZ</>
(Mark Wong)
Add <literal>XLOG_BLCKSZ</> as independent from <literal>BLCKSZ</>
(Mark Wong)
</para>
</listitem>
<listitem>
<para>
Add <literal>LWLOCK_STATS</> define to report locking
activity (Tom)
Add <literal>LWLOCK_STATS</> define to report locking
activity (Tom)
</para>
</listitem>
<listitem>
<para>
Add <acronym>GIN</> (Generalized Inverted iNdex) index
access method (Teodor)
Add <acronym>GIN</> (Generalized Inverted iNdex) index
access method (Teodor)
</para>
</listitem>
<listitem>
<para>
Emit warnings for unknown <application>configure</> options
(Martijn van Oosterhout)
Emit warnings for unknown <application>configure</> options
(Martijn van Oosterhout)
</para>
</listitem>
<listitem>
<para>
Add <literal>PG_MODULE_MAGIC</> header block to all shared
object files (Martijn van Oosterhout)
Add <literal>PG_MODULE_MAGIC</> header block to all shared
object files (Martijn van Oosterhout)
</para>
<para>
The magic blocks prevent version mismatches between object
files and servers.
The magic blocks prevent version mismatches between object
files and servers.
</para>
</listitem>
<listitem>
<para>
Add a <acronym>GUC</> parameter <envar>seq_page_cost</>
(Tom)
Add a <acronym>GUC</> parameter <envar>seq_page_cost</>
(Tom)
</para>
</listitem>
<listitem>
<para>
Re-implement the regression test script as a C program
(Magnus, Tom)
Re-implement the regression test script as a C program
(Magnus, Tom)
</para>
</listitem>
<listitem>
<para>
Add <application>DTrace</> support (Robert Lor)
Add <application>DTrace</> support (Robert Lor)
</para>
</listitem>
<listitem>
<para>
Allow loadable modules to allocate shared memory and
lightweight locks (Marc Munro)
Allow loadable modules to allocate shared memory and
lightweight locks (Marc Munro)
</para>
</listitem>
<listitem>
<para>
Add automatic initialization and finalization of dynamically
loaded libraries (Ralf Engelschall, Tom)
Add automatic initialization and finalization of dynamically
loaded libraries (Ralf Engelschall, Tom)
</para>
<para>
New functions <function>_PG_init()</> and <function>_PG_fini()</>
are called if the library defines such symbols. Hence we
no longer need to specify an initialization function in
<envar>shared_preload_libraries</>; we can assume that the
library used the <function>_PG_init()</> convention instead.
New functions <function>_PG_init()</> and <function>_PG_fini()</>
are called if the library defines such symbols. Hence we
no longer need to specify an initialization function in
<envar>shared_preload_libraries</>; we can assume that the
library used the <function>_PG_init()</> convention instead.
</para>
</listitem>
<listitem>
<para>
Add support for libraries that enhance server-side languages
(Korry Douglas)
Add support for libraries that enhance server-side languages
(Korry Douglas)
</para>
<para>
Such libraries can be used for debugging or performance
measurement.
Such libraries can be used for debugging or performance
measurement.
</para>
</listitem>
<listitem>
<para>
Rename existing <acronym>GUC</> variable
<envar>preload_libraries</> to <envar>shared_preload_libraries</>
(Tom)
Rename existing <acronym>GUC</> variable
<envar>preload_libraries</> to <envar>shared_preload_libraries</>
(Tom)
</para>
</listitem>
<listitem>
<para>
Add new variable <envar>server_version_num</> (Greg Sabino
Mullane)
Add new variable <envar>server_version_num</> (Greg Sabino
Mullane)
</para>
<para>
This is like server_version, but is an integer, e.g.
<literal>80200</>. It allows easy applications version
checks.
This is like server_version, but is an integer, e.g.
<literal>80200</>. It allows easy applications version
checks.
</para>
</listitem>
<listitem>
<para>
New <acronym>XML</> documentation section (Bruce)
New <acronym>XML</> documentation section (Bruce)
</para>
</listitem>
</sect3>
<sect3>
...
...
@@ -1895,40 +1939,40 @@ For new features, add links to the documentation sections.
<listitem>
<para>
Major tsearch2 improvements (Oleg, Teodor)
Major tsearch2 improvements (Oleg, Teodor)
</para>
<itemizedlist>
<listitem>
<para>
multibyte encoding support, including <acronym>UTF8</>
multibyte encoding support, including <acronym>UTF8</>
</para>
</listitem>
<listitem>
<para>
query rewriting support
query rewriting support
</para>
</listitem>
<listitem>
<para>
improved ranking functions
improved ranking functions
</para>
</listitem>
<listitem>
<para>
thesaurus dictionary support
thesaurus dictionary support
</para>
</listitem>
<listitem>
<para>
Ispell dictionaries now recognize <application>MySpell</>
format, used by <application>OpenOffice</>.
Ispell dictionaries now recognize <application>MySpell</>
format, used by <application>OpenOffice</>.
</para>
</listitem>
<listitem>
<para>
<acronym>GIN</> support
<acronym>GIN</> support
</para>
</listitem>
...
...
@@ -1938,138 +1982,105 @@ For new features, add links to the documentation sections.
<listitem>
<para>
Add pg_freespacemap to display free space map information
(Mark Kirkwood)
</para>
</listitem>
<listitem>
<para>
New uninstall scripts (David)
Add pg_freespacemap to display free space map information
(Mark Kirkwood)
</para>
</listitem>
<listitem>
<para>
Add pgrowlocks (Tatsuo)
</para>
<para>
This shows row locking information for a specified table.
New uninstall scripts (David)
</para>
</listitem>
<listitem>
<para>
Add <application>Pgadmin</> administration functions to
adminpack (Dave)
Add pgrowlocks (Tatsuo)
</para>
<para>
These functions provide additional file system access
routines not present in the default <productname>PostgreSQL</>
server.
This shows row locking information for a specified table.
</para>
</listitem>
<listitem>
<para>
Add index information to pgstattuple (ITAGAKI Takahiro,
Satoshi Nagayasu
)
Add <application>Pgadmin</> administration functions to
adminpack (Dave
)
</para>
</listitem>
<listitem>
<para>
pgcrypto now has all planned functionality (Marko Kreen)
These functions provide additional file system access
routines not present in the default <productname>PostgreSQL</>
server.
</para>
</listitem>
<listitem>
<para>
Update cube (Joshua Reich)
</para>
<para>
New functions are <function>cube(float[])</>,
<function>cube(float[], float[])</>, and
<function>cube_subset(cube, int4[])</>.
Add index information to pgstattuple (ITAGAKI Takahiro,
Satoshi Nagayasu)
</para>
</listitem>
<listitem>
<para>
Added async query capability to dblink (Kai Londenberg,
Joe Conway)
pgcrypto now has all planned functionality (Marko Kreen)
</para>
</listitem>
<listitem>
<para>
Add sslinfo (Victor Wagner
)
Update cube (Joshua Reich
)
</para>
<para>
Reports information about the current <acronym>SSL</>
certificate.
New functions are <function>cube(float[])</>,
<function>cube(float[], float[])</>, and
<function>cube_subset(cube, int4[])</>.
</para>
</listitem>
<listitem>
<para>
Remove ora2pg, now at <ulink
url="http://www.samse.fr/GPL/ora2pg"></ulink>
Added async query capability to dblink (Kai Londenberg,
Joe Conway)
</para>
</listitem>
<listitem>
<para>
Remove contrib modules that have been migrated to pgfoundry:
adddepend, dbase, dbmirror, fulltextindex, mac, userlock
Add sslinfo (Victor Wagner)
</para>
</listitem>
<listitem>
<para>
Remove abandoned modules: mSQL-interface, ips
Reports information about the current <acronym>SSL</>
certificate.
</para>
</listitem>
<listitem>
<para>
Add hstore module (Oleg, Teodor)
Add hstore module (Oleg, Teodor)
</para>
</listitem>
<listitem>
<para>
Add isn module, replacing isbn_issn (Jeremy Kronuz)
Add isn module, replacing isbn_issn (Jeremy Kronuz)
</para>
<para>
This now supports <acronym>EAN13</>, <acronym>UPC</>,
<acronym>ISBN</> (books), <acronym>ISMN</> (music), and
<acronym>ISSN</> (serials).
This now supports <acronym>EAN13</>, <acronym>UPC</>,
<acronym>ISBN</> (books), <acronym>ISMN</> (music), and
<acronym>ISSN</> (serials).
</para>
</listitem>
<listitem>
<para>
New operators for array-subset comparisons (<literal>@></>,
<literal><@</>, <literal>&&</>) (Tom)
</para>
</listitem>
<listitem>
<para>
In xml, rename <function>xml_valid()</> to
<function>xml_is_well_formed()</> (Tom)
</para>
<para>
<function>xml_valid()</> will remain for backward compability,
but its behavior will change to do schema checks in future
releases.
New operators for array-subset comparisons (<literal>@></>,
<literal><@</>, <literal>&&</>) (Tom)
</para>
</listitem>
...
...
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