Back-patch today's memory management fixups in contrib/xml2. Prior to 8.3, these changes are not critical for compatibility with core Postgres, since core had no libxml2 calls then. However there is still a risk if contrib/xml2 is used along with libxml2 functionality in Perl or other loadable modules. So back-patch to all versions. Also back-patch addition of regression tests. I'm not sure how many of the cases are interesting without the interaction with core xml code, but a silly regression test is still better than none at all.

Remove xmlCleanupParser calls from contrib/xml2. These are unnecessary and probably dangerous. I don't see any immediate risk situations in the core XML support or contrib/xml2 itself, but there could be issues with external uses of libxml2, and in any case it's an accident waiting to happen.

In pgsql/src/port/copydir.c, buildfarm still unhappy, so I'll bet it's EACCES not EPERM.

Fix contrib/xml2 so regression test still works when it's built without libxslt. This involves modifying the module to have a stable ABI, that is, the xslt_process() function still exists even without libxslt. It throws a runtime error if called, but doesn't prevent executing the CREATE FUNCTION call. This is a good thing anyway to simplify cross-version upgrades.

In pgsql/src/pl/plpgsql/src/gram.y, cause plpgsql to throw an error if "INTO rowtype_var" is followed by a comma. Per bug #5352, this helps to provide a useful error message if the user tries to do something presently unsupported, namely use a rowtype variable as a member of a multiple-item INTO list.

In pgsql/src/pl/plpgsql/src/gram.y, instead of trying (and failing) to allow <<label>> at the end of a DECLARE section, throw an error message saying explicitly that the label must go before DECLARE. Per investigation of a recent pgsql-novice question, this code did not work as intended in any modern PG version, maybe not ever. Allowing such a thing would only create ambiguity anyway, so it seems better to remove it than fix it.

Export xml.c's libxml-error-handling support so that contrib/xml2 can use it too, instead of duplicating the functionality (badly). I renamed xml_init to pg_xml_init, because the former seemed just a bit too generic to be safe as a global symbol. I considered likewise renaming xml_ereport to pg_xml_ereport, but felt that the reference to ereport probably made it sufficiently PG-centric already.

Make contrib/xml2 use core xml.c's error handler, when available (that is, in versions >= 8.3). The core code is more robust and efficient than what was there before, and this also reduces risks involved in swapping different libxml error handler settings. Before 8.3, there is still some risk of problems if add-on modules such as Perl invoke libxml without setting their own error handler. Given the lack of reports I'm not sure there's a risk in practice, so I didn't take the step of actually duplicating the core code into older contrib/xml2 branches. Instead I just tweaked the existing code to ensure it didn't leave a dangling pointer to short-lived memory when throwing an error.

Fix a couple of places that would loop forever if attempts to read a stdio file set ferror() but never set feof(). This is known to be the case for recent glibc when trying to read a directory as a file, and might be true for other platforms/cases too. Per report from Ed L. (There is more that we ought to do about his report, but this is one easily identifiable issue.)

In pgsql/src/backend/libpq/hba.c, when reading pg_hba.conf and similar files, do not treat @file as an inclusion unless (1) the @ isn't quoted and (2) the filename isn't empty. This guards against unexpectedly treating usernames or other strings in "flat files" as inclusion requests, as seen in a recent trouble report from Ed L. The empty-filename case would be guaranteed to misbehave anyway, because our subsequent path-munging behavior results in trying to read the directory containing the current input file. I think this might finally explain the report at
http://archives.postgresql.org/pgsql-bugs/2004-05/msg00132.php of a crash after printing "authentication file token too long, skipping", since I was able to duplicate that message (though not a crash) on a platform where stdio doesn't refuse to read directories. We never got far in investigating that problem, but now I'm suspicious that the trigger condition was an @ in the flat password file. Back-patch to all active branches since the problem can be demonstrated in all branches except HEAD. The test case, creating a user named "@", doesn't cause a problem in HEAD since we got rid of the flat password file. Nonetheless it seems like a good idea to not consider quoted @ as a file inclusion spec, so I changed HEAD too.

In pgsql/src/backend/catalog/aclchk.c, fix warning messages in restrict_and_check_grant() to include the column name when warning about column-level privileges. This is more useful than before and makes the apparent duplication complained of by Piyush Newe not so duplicate. Also fix lack of quote marks in a related message text. Back-patch to 8.4, where column-level privileges were introduced. Stephen Frost

In pgsql/src/backend/libpq/hba.c, it's clearly now pointless to do backwards compatible parsing of this, since we released a version without it, so remove the comment that says we might want to do that.

Add --psqlrc=FILENAME parameter to psql, to process an explicitly named file instead of ~/.psqlrc on startup.

Revert patch for --psqlrc=FILENAME in psql.

Heikki Linnakangas a commité :

Fix numericlocale psql option when used with a null string and latex and troff formats; a null string must not be formatted as a numeric. The more exotic formats latex and troff also incorrectly formatted all strings as numerics when numericlocale was on. Backpatch to 8.1 where numericlocale option was added. This fixes bug #5355 reported by Andy Lester.

In pgsql/src/bin/psql/print.c, fix translation of strings in psql \d output (translation in headers worked, but not in cells).

Fix pg_dump of ACLs of foreign servers. The command to grant/revoke privileges of foreign servers is "GRANT ... ON *FOREIGN* SERVER ...".

In pgsql/src/backend/parser/parse_coerce.c, fix IsBinaryCoercible to not confuse a cast using in/out functions with binary compatibility. Backpatch to 8.4 where INOUT casts were introduced.

In pgsql/src/tools/msvc/vcregress.pl, do not run regression tests for contrib/xml2 on MSVC unless building with XML.

In pgsql/src/tools/msvc/Solution.pm, add missing library and include dir for XSLT in MSVC builds.

In pgsql/src/tools/msvc/Solution.pm, make iconv work like other optional libraries for MSVC.

Peter Eisentraut a commité :

In pgsql/doc/src/sgml/keywords.sgml, update keywords list for 9.0.

Bruce Momjian a commité :

Document the effect of max_standby_delay on increasing the delay of data from master to slave, and discourage its use during slave/master keep-xid-alive connections.

In pgsql/doc/src/sgml/config.sgml, adjust max_standby_delay documentation to be clearer, and mention that two adjacent long-running queries have much less than max_standby_delay before query cancel is possible.

In pgsql/src/backend/utils/adt/xml.c, pgindent run on xml.c in 8.3 branch, per request from Tom Lane.

In pgsql/doc/src/sgml/ref/create_function.sgml, restructure CREATE FUNCTION "NOTES" section to be shorter; move items into proper sections, per suggestion from Tom Lane.

In pgsql/doc/src/sgml/ref/create_function.sgml, fix SGML markup.

Document that "Q" is ignored by to_date and to_timestamp. Add C comment about the behavior. Document that quotes in to_date, to_timestamp, to_number skip input characters.