PostgreSQL La base de donnees la plus sophistiquee au monde.

Nouvelles hebdomadaires de PostgreSQL - 10 avril 2011

Le PUG d'Austin se réunira le 13 avril :

Le PUG de New-York se réunira le 14 avril à 18h. Détails et RSVP ci-dessous :

Les nouveautés des produits dérivés

Offres d'emplois autour de PostgreSQL en avril

PostgreSQL Local

PostgreSQL dans les média

PostgreSQL Weekly News / les nouvelles hebdomadaires vous sont offertes cette semaine par David Fetter. Traduction par l'équipe PostgreSQLFr sous licence CC BY-NC-SA.

Proposez vos articles ou annonces avant dimanche 15:00 (heure du Pacifique). Merci de les envoyer en anglais à david (a), en allemand à pwn (a), en italien à pwn (a) et en espagnol à pwn (a)

(lien vers l'article original)

Revues de code

Correctifs appliqués

Alvaro Herrera a poussé :

Robert Haas a poussé :

Simon Riggs a poussé :

Peter Eisentraut a poussé :

Tom Lane a poussé :

  • Revise the API for GUC variable assign hooks. The previous functions of assign hooks are now split between check hooks and assign hooks, where the former can fail but the latter shouldn't. Aside from being conceptually clearer, this approach exposes the "canonicalized" form of the variable value to guc.c without having to do an actual assignment. And that lets us fix the problem recently noted by Bernd Helmle that the auto-tune patch for wal_buffers resulted in bogus log messages about "parameter "wal_buffers" cannot be changed without restarting the server". There may be some speed advantage too, because this design lets hook functions avoid re-parsing variable values when restoring a previous state after a rollback (they can store a pre-parsed representation of the value instead). This patch also resolves a longstanding annoyance about custom error messages from variable assign hooks: they should modify, not appear separately from, guc.c's own message about "invalid parameter value".
  • Fix collations when we call transformWhereClause from outside the parser. Previous patches took care of assorted places that call transformExpr from outside the main parser, but I overlooked the fact that some places use transformWhereClause as a shortcut for transformExpr + coerce_to_boolean. In particular this broke collation-sensitive index WHERE clauses, as per report from Thom Brown. Trigger WHEN and rule WHERE clauses too. I'm not forcing initdb for this fix, but any affected indexes, triggers, or rules will need to be dropped and recreated.
  • Fix SortTocFromFile() to cope with lines that are too long for its buffer. The original coding supposed that a dump TOC file could never contain lines longer than 1K. The folly of that was exposed by a recent report from Per-Olov Esgard. We only really need to see the first dozen or two bytes of each line, since we're just trying to read off the numeric ID at the start of the line; so there's no need for a particularly huge buffer. What there is a need for is logic to not process continuation bufferloads. Back-patch to all supported branches, since it's always been like this.
  • Fix plpgsql's issues with dropped columns in rowtypes in 8.4 branch. This is a back-patch of commit dcb2bda9b7042dbf43f876c94ebf35d951de10e9 of Aug 6 2009, which fixed assorted cases in which plpgsql would fail to cope with composite types that contain any dropped columns. Per discussion, this fix has been out in 9.0 for long enough to make it improbable that it creates any new bugs, so this is a low-risk fix. To make it even lower risk, I did not back-patch the changes in execQual.c, but just accepted the duplication of code between there and tupconvert.c. The added files tupconvert.h and tupconvert.c match their current states in HEAD.
  • Modernize dlopen interface code for FreeBSD and OpenBSD. Remove the hard-wired assumption that __mips__ (and only __mips__) lacks dlopen in FreeBSD and OpenBSD. This assumption is outdated at least for OpenBSD, as per report from an anonymous 9.1 tester. We can perfectly well use HAVE_DLOPEN instead to decide which code to use. Some other cosmetic adjustments to make freebsd.c, netbsd.c, and openbsd.c exactly alike.
  • Tweaks for SSI out-of-shared memory behavior. If we call hash_search() with HASH_ENTER, it will bail out rather than return NULL, so it's redundant to check for NULL again in the caller. Thus, in cases where we believe it's impossible for the hash table to run out of slots anyway, we can simplify the code slightly. On the flip side, in cases where it's theoretically possible to run out of space, we don't want to rely on dynahash.c to throw an error; instead, we pass HASH_ENTER_NULL and throw the error ourselves if a NULL comes back, so that we can provide a more descriptive error message. Kevin Grittner
  • Add an example of WITH (UPDATE RETURNING) INSERT to the INSERT ref page. Per a discussion with Gavin Flower. This barely scratches the surface of potential WITH (something RETURNING) use cases, of course, but it's one of the simplest compelling examples I can think of.
  • Avoid extra whitespace in the arguments of <indexterm>. As noted by Thom Brown, this confuses the DocBook index processor; it fails to merge entries that differ only in whitespace, and sorts them unexpectedly as well. Seems like a toolchain bug, but I'm not going to hold my breath waiting for a fix. Note: easiest way to find these is to look for double spaces in HTML.index.
  • Modify initdb to complain only when no usable system locales are found. Per discussion, the original behavior seems too noisy. But if things are so broken that none of the locales reported by "locale -a" are usable, that's probably worth warning about.
  • Avoid an unnecessary syscache lookup in parse_coerce.c. All the other fields of the constant are being extracted from the syscache entry we already have, so handle collation similarly. (There don't seem to be any other uses for the new function at the moment.)
  • Tweak collation setup for GIN index comparison functions. Honor index column's collation spec if there is one, don't go to the expense of calling get_typcollation when we can reasonably assume that all GIN storage types will use default collation, and be sure to set a collation for the comparePartialFn too.
  • Fix make_greater_string to not have an undocumented collation assumption. The previous coding worked only if ltproc->fn_collation was always either DEFAULT_COLLATION_OID or a C-compatible locale. While that's true at the moment, it wasn't documented (and in fact wasn't true when this code was committed...). But it only takes a couple more lines to make its internal caching behavior locale-aware, so let's do that.
  • Clean up minor collation issues in indxpath.c. Get rid of bogus collation test in match_special_index_operator (even for ILIKE, the pattern match operator's collation doesn't matter here, and even if it did the test was testing the wrong thing). Fix broken looping logic in expand_indexqual_rowcompare. Add collation check in match_clause_to_ordering_op. Make naming and argument ordering more consistent; improve comments.
  • Don't show unusable collations in psql's \dO command. "Unusable" collations are those not matching the current database's encoding. The former behavior inconsistently showed such collations some of the time, depending on the details of the pattern argument.
  • Adjust collation determination rules as per discussion. Remove crude hack that tried to propagate collation through a function-returning-record, ie, from the function's arguments to individual fields selected from its result record. That is just plain inconsistent, because the function result is composite and cannot have a collation; and there's no hope of making this kind of action-at-a-distance work consistently. Adjust regression test cases that expected this to happen. Meanwhile, the behavior of casting to a domain with a declared collation stays the same as it was, since that seemed to be the consensus.
  • Remove collate.linux.utf8.sql's assumptions about ".utf8" in locale names. Tweak the test so that it does not depend on the platform using ".utf8" as the extension signifying that a locale uses UTF8 encoding. For the most part this just requires using the abbreviated collation names "en_US" etc, though I had to work a bit harder on the collation creation tests. This opens the door to using the test on platforms that spell locales differently, for example ".utf-8" or ".UTF-8". Also, the test is now somewhat useful with server encodings other than UTF8; though depending on which encoding is selected, different subsets of it will fail for lack of character set support.
  • Fix ILIKE to honor collation when working in single-byte encodings. The original collation patch only fixed the multi-byte code path. This change also ensures that ILIKE's idea of the case-folding rules is exactly the same as str_tolower's.
  • Clean up overly complex code for issuing some related error messages. The original version was unreadable, and not mechanically checkable either.
  • Teach regular expression operators to honor collations. This involves getting the character classification and case-folding functions in the regex library to use the collations infrastructure. Most of this work had been done already in connection with the upper/lower and LIKE logic, so it was a simple matter of transposition. While at it, split out these functions into a separate source file regc_pg_locale.c, so that they can be correctly labeled with the Postgres project's license rather than the Scriptics license. These functions are 100% Postgres-written code whereas what remains in regc_locale.c is still mostly not ours, so lumping them both under the same copyright notice was getting more and more misleading.
  • Insert dummy "break"s to silence compiler complaints. Apparently some compilers dislike a case label with nothing after it. Per buildfarm.
  • Add some more mapping macros for Microsoft wide-character API. Per buildfarm.

Bruce Momjian a poussé :

Andrew Dunstan a poussé :

Correctifs rejetés (à ce jour)

  • Pas de déception cette semaine :-)

Correctifs en attente

  • Alexey Klyukin sent in an update of Selena Deckelmann's patch to create a validator for config files.
  • Tom Lane sent in a patch to document the revised API for GUC assign hooks via changes to src/backend/utils/misc/README.
  • Shigeru HANADA sent in patches to implement comments on USER MAPPINGs, part of SQL/MED.
  • Peter Eisentraut sent in a patch to fix an issue in the Windows build.
  • Heikki Linnakangas sent in a patch to have the parser emit an InExpr node type (similar to the extant CaseExpr), which allows the optimizer to rearrange IN() to OR() in cases where it is safe to do so.
  • Shigeru HANADA sent in a patch to implement comments on FOREIGN DATA WRAPPER and SERVER objects, which are part of SQL/MED.
  • Josh Kupershmidt sent in a doc patch suggesting using openjade 1.3 rather than 1.4devel as part of the doc build toolset.
  • KaiGai Kohei sent in a patch for the SE-PostgreSQL supplied module which checks the process:transition permission between the labels involved when a client's label changes.
  • Noah Misch sent in another patch to fix an incompatibility between pg_dump --binary-upgrade and ALTER TYPE ... DROP ATTRIBUTE.
  • Noah Misch sent in a patch to fix an issue where pg_attribute.attinhcount was incorrect.
  • Peter Eisentraut sent in a patch to add automatic pg_upgrade tests.
  • Peter Eisentraut sent in a patch to help fix some issues with collation support on Windows.
  • Muhammad Usama sent in a patch to remove an extra linefeed from vacuumlo.
  • Agent M sent in a patch to use POSIX shared memory, this one accounting for multiple-postmaster start race conditions.

pgwn/10_avril_2011.txt · Dernière modification: 2011/04/19 01:11 par buggy