[DPWN] Wöchentlicher PostgreSQL Newsletter - 28. Januar 2007

Der Originalartikel befindet sich unter:
http://people.planetpostgresql.org/dfetter/

== Wöchentlicher PostgreSQL Newsletter - 28. Januar 2007 ==

Eine andere lebhafte Diskussion geht auf -hackers vor sich über Verbesserungen bei autovacuum.

Andy Astor, CEO von EnterpriseDB hat lautstark abgelehnt, dass es eine Richtlinie für das Sammeln von Emailadressen von PostgreSQL Listen und zum Versenden von Werbematerial gab.

== PostgreSQL Produkt Neuigkeiten ==

Libpqxx 2.6.9 pre-release ist draussen.
http://thaiopensource.org/~jtv/tmp/pqxx/

SQL/PSM 0.1 erschienen.
http://postgresql.interweb.cz/index.php/SQL/PSM

DBI-Link 2.0.0 erschienen.
http://pgfoundry.org/projects/dbi-link/

Another PostgreSQL Diff Tool 1.0.0_beta16 erschienen.
http://pgfoundry.org/projects/apgdiff/

PostgresDAC 2.3.7 erschienen.
http://microolap.com/products/connectivity/postgresdac/download/

Mammoth Replicator 8.0.10-1.7 erschienen.
https://www.commandprompt.com/products/mammothreplicator/

== PostgreSQL Jobs im Januar ==

http://archives.postgresql.org/pgsql-jobs/2007-01/threads.php

== PostgreSQL Lokal ==

Hauptbeitragender Gavin Sherry und Postgres-R Leiter Markus werden auf dem SFPUG Meeting in San Francisco im Hyperic LCCs sprechen.
http://postgresql.meetup.com/1/calendar/5380885/

PostgreSQLFr wird einen Stand auf der SolutionsLinux 2007 in Paris
(Frankreich) vom 30. Januar zum 1. Februar haben. Jean-Paul Argudo,
Schatzmeister der PostgreSQLFr Non-Profit Vereinigung, wird eine
Session über FLOSS Datenbanken halten. Weitere Informationen auf Französisch hier:
http://www.solutionslinux.fr/index.php

Es wird einen PostgreSQL Stand auf der FOSDEM am 24. und 25. Februar in
Brüssel, Belgien sein. Viele der üblichen Verdächtigen von den EU
PostgreSQL Communities werden dort sein. Kontaktiere de@postgresql.org
um teilzunehmen.
http://www.fosdem.org/2007/

Die Italienische PostgreSQL Community wird einen PostgreSQL Tag im
Sommer abhalten. Bookmarke den folgenden Link, um teilzunehmen.
http://www.pgday.it

== PostgreSQL in den News ==

Planet PostgreSQL: http://www.planetpostgresql.org/

General Bits, Archive und gelegentliche News Artikel:
http://www.varlena.com/GeneralBits/

Dieser wöchentliche PostgreSQL Newsletter wurde erstellt von David
Fetter und Devrim GUNDUZ.

Um deine Beiträge für die nächste Ausgabe zu übermitteln, sende diese
an david@fetter.org bis Sonntag, 15:00 Uhr Pazifischer Zeit.

== Angewandte Patches ==

Andrew Dunstan checkte ein:

  • Fix plpython MSVC Build im Non-Debug Modus.

  • Repariere Path Probleme im MSVC bison Wrapper. Laut Joachim Wieland.

  • In PL/Perl, entferne unnötige und jetzt inakkurate Casts, welche schon mit älterem Code entfernt
    werden sollten.

  • In PL/Perl, erlaube, das Argumente für spi_prepare sowohl Standardtypen wie auch Typen,
    die in pg_type bekannt sind, sein dürfen. Beseitigt Bug #2917. Addiere einige Regression Tests
    für diesen Fall.

Michael Meskes checkte ein:

  • In ecpg, repariere erwartete Dateien, so das diese wieder im Einklang mit den Tests sind.

  • In ecpg, entferne Compiler Warnung aufgrund unnötiger unsigned Deklaration and entferne
    einen Regression Test, welcher diesen libc Präzision Bug auf einigen Plattformen auslöst.

Neil Conway checkte ein:

  • Benenne den uuid_t Typ nach pg_uuid_t um, um Konflikte mit jedwegen Definitionen on uuid_t zu vermeiden, die von Systemheadern bereitgestellt werden könnten. Dies sollte hoffentlich die Win32 Buildprobleme beseitigen, die Magnus berichtet hat.

  • Gevik Babakhani’s Patch, der einen neuen Builtin Typ “uuid” addiert. Dies implementiert den UUID Typ, similar zu dem, welcher in RFC 4122 definiert ist. Dieser Patch beinhaltet die Basisimplementierung und Regression Tests. Dokumentation und vielleicht etwas mehr Funktionalität wird später kommen. Catversion erhöht. Review von Peter Eisentraut, Tom Lane und Neil Conway.

  • Magnus Haganders Patch, der einige VC++ Compiler Warnungen zermahlt. Markiere float Literale
    mit dem “f” Suffix, um sie von Doubles zu unterscheiden. Sorge dafür, das einige Funktionsdeklarationen
    und Definitionen den “const” Qualifier mehr konsistent nutzen. Ignoriere Warnung 4102 (“Unreferenziertes
    Label”), denn diese Warnungen werden immer von bison-generiertem Code ausgegeben.

  • Magnus Haganders Patch, der einen setlocal Befehl an den Anfang von build.bat setzt. Dies ist
    notwendig, um mit buildenv.bat sauber umgehen zu können, so das PATH (als Beispiel) nicht unendlich
    expandiert. Laut einem Report von Joachim Wieland.

Peter Eisentraut checkte ein:

  • In pgsql/src/backend/utils/adt/xml.c, reaktiviere libxml Speichermanagement via palloc,
    jetzt da ich denke, das ich die Bedingungen, unter denen dies sicher ist, klassifiziert habe
    (Siehe Source Code Kommentare).

  • In pgsql/src/backend/utils/adt/xml.c, addiere angehängtes Nullbyte in Unicode codepoint Umwandlung.

  • Verschiedene Reparaturen in der Logik der XML Funktionen: Addiere neuen SQL Befehl SET XML OPTION
    (auch über die reguläre GUC erreichbar), um die DOKUMENT vs. CONTENT Option bei impliziten Parse- und
    Serialisieroperationen zu kontrollieren. Subtile Korrekturen beim Handhaben von selbstständigen
    Properties in xmlroot(). Erlaube xmlroot() in Inhaltsfragmenten zu arbeiten. Subtile Korrekturen
    beim Handhaben der Versions Properties in xmlconcat(). Code Refaktoring zum Produzieren von XML
    Deklarationen.

  • Vereinfache die Handhabung von XML Fehlermeldungen: nutze einfach den
    String, den libxml liefert, als detaillierte Nachricht. Laut
    <a href=“http://ads.wars-nicht.de/blog/exit.php?url_id=1962&entry_id=98” title=“http://archives.postgresql.org/pgsql-hackers/2006-12/msg01087.php” onmouseover=“window.status='http://archives.postgresql.org/pgsql-hackers/2006-12/msg01087.php’;return true;” onmouseout=“window.status=’’;return true;” target="_blank"http://archives.postgresql.org/pgsql-hackers/2006-12/msg01087.php/a>.
    Zum Umwandeln von Fehlercodes in Nachrichten müssen wir jetzt nur noch die
    Codes bearbeiten, die wir selbst setzen.

Alvaro Herrera checkte ein:

  • Magnus Haganders Patch welcher für vcbuild nach den Änderungen an pg_proc.h
    notwendig ist (sind die gleichen Änderungen wie für gen_fmgrtab.sh im Unix Build).

Tom Lane checkte ein:

  • Verbessere Hash Joins um Input Tuples unmittelbar zu streichen, wenn sie nicht matchen können, weil sie einen Null Join Key enthalten (und der Join Operator ist als strict bekannt). Verbessert die Performance signifikant, wenn der innere Join jede Menge Nulls enthält, laut Bug #2930.

  • Entferne unnötigen Checkpoint von PL Regression Tests. Dies war einstmals praktisch um zu verhindern, dass Core Dumps verschwinden, aber ist jetzt unnötig denn (a) wir entfernen cores in individuellen DB Unterverzeichnissen nicht mehr und (b) CREATE DATABASE forciert sowieso einen internen Checkpoint.

  • Entferne einige unnötige Konversationen in build_regtype_array().

  • Repariere Versehen beim Erstellen von “append relations”. Wir sollten rel->tuples aufsetzen, sowieso rel->rows, denn einige Erwartungsfunktionen erwarten beide gesetzt um valid in jeder baserel zu sein. Nach einem Bericht von Dave Dutcher.

  • Einige kleine Verbesserungen in der Genauigkeit von plpgsql Fehlerstellen Berichte; inspiriert von den irreführenden CONTEXT Zeilen im kürzlichen Bugreport von Stefan Kaltenbrunner. Erlaube ebenfalls Übersetzungen von Statement-Type Namen in diesen Nachrichten.

  • Repariere plpgsql’s “simple expression” Auswertungsmechanismus so dass er sicher agiert, wenn Subtraktionen vorhanden sind. Um sicherzustellen, dass alle ExprContext Shutdown Callbacks zur richtigen Zeit aufgerufen werden, brauchen wir einen extra EState für jeden Transaktionslevel. Nach dem “TupleDesc reference leak” Fehlerbericht von Stefan Kaltenbrunner. Obgleich ich überzeugt bin, dass der Code bis zurück zu 8.0 falsch ist, sieht es nicht so aus, dass es einen Weg gibt, das Problem vor 8.2 zu manifestieren, 8.0 und 8.1 nutzen den ExprContextCallback Mechanismus nur zum Abarbeiten von Set-returning Funktionen, was nicht irgendwie brauchbar in einer “simple expression” ausgeführt werden kann. So kein Backpatch für bevor 8.2 — das Risiko unvorhersehbarer Bruchstellen gegenüber den Chancen, etwas zu reparieren, überwiegt.

  • Deat, kann kein zusätzliches Argument in log_error einfügen. Ist ein zusätzlicher sprintf Pushup es wert, sicherzustellen, das wir etwas sinnvolles für Out-of-Range Existatus reporten können?

  • Räume mit kaputter Nutzung von HAVE_DECL_SYS_SIGLIST und inkonsistent/schlecht formatierten Fehlermeldungen auf.

  • Addiere eine Verzögerung beim Start des stats Tests, so dass jedwege vorherige stats Aktivität stillgelegt ist. Möglicherweise wird dies den großen Anstieg nicht reproduzierbarer stats Test Fehler korrigieren, welche wir seit dem defaultmässigen Anschalten von stats_row_level bemerkt haben.

  • Abteilung des zweiten Gedankens: der IQ von estimate_array_length() muss aktuell mit dem von scalararraysel() gehalten werden, andernfalls zählen Erwartungen, die zählen sollten, ev. nicht. Infolgedessen bringe der Funktion Binär-kompatible Fälle bei.

  • Repariere scalararraysel() um mit Binär-kompatiblen Fällen umzugehen, z.B. text[] versus varchar[]. Dieses Übersehen erklärt womöglich Ryan Holmes kürzliche Beschwerde — er bekam eine generische Selektivitätserwartung anstatt irgendetwas intelligentem.

  • Korrigiere einen alten Logikfehler im Btree Page Splitting: wenn ein Split an exakt der Stelle erachtet wird an der ein neues Item eingefügt werden soll, nutzte die Kalkulation eine falsche Größe für den “high key” der neuen Page. Dies konnte zu einem unbrauchbaren Split führen, resultierend in einem “Panic: kann keinen Eintrag zum linken Geschwisterteil addieren” (oder “rechtes Geschwisterteil”) Fehler. Obwohl dieser Fehler schon eine sehr lange Zeit dort ist, ist es sehr schwer, einen Fehler vor 8.2 zu erzeugen, da dort generell sehr viel freier Platz auf beiden Seiten des gewählten Splits war. In 8.2, wo der vom User festgelegte Füllfaktor bestimmt, wieviel Platz der Code versucht freizulassen, ist ein unbrauchbarer Split sehr viel eher möglich. Bericht von Joe Conway, Diagnose und Fix von Heikki Linnakangas.

  • Backporte Änderungen vom 16. und 17. Januar um wartende fsync Anforderungen während DROp TABLE und DROP DATABASE zu “entfernen”. Sollte unerwartete “Zugriff verweigert” Fehler unter Windows verhindern und ist ebenfalls sauberer auf anderen Plattformen, da wir nicht länger darauf vertrauen müssen, dass ENOENT während eines fsync Versuches in Ordnung ist. Patches bis zurück für 8.1; laut kürzlicher Diskussion denke ich wir machen uns keine Sorgen mehr über Windows-spezifische Fragen mit 8.0.

  • Unter Windows, nutze pgwin32_waitforsinglesocket() statt select() um auf Input beim Stats Collector zu warten. Unsere select() Emulation ist offensichtlich fehlerhaft für UDP Sockets

. Dies sollte Probleme mit Stats Collection lösen (und infolgedessen autovacuum) die unter mehr als minimalem Load versagen.

  • Bekomme pg_utf_mblen(), pg_utf2wchar_with_len(), und utf2ucs() alle auf die gleiche Seite über die maximale UTF8 Sequenzlänge die wir unterstützen (4 Bytes seit 8.1.3, 3 vorher). pg_utf2wchar_with_len wurde niemals für 4-Byte Unterstützung aktualisiert und hatte auf jeden Fall ein Risiko für einen Buffer-Overrun denn es konnte mehrere pg_wchars produzieren von dem, was mblen für ein UTF8 Zeichen hält. Der einzige Grund, warum wie kein großes Sicherheitsloch haben ist, dass die meisten Aufrufer einen Worst-Case Ausgabebuffer reservieren; die einzige Ausnahme in erschienenen Versionen sieht wie pre-8.2 iwchareq() (m.a.W. LIKE) aus, welches gecrasht werden kann durch Ausnullen der Returnadresse — but AFAIC kann dies nicht weiter ausgenutzt werden als für einen Crash, durch die Unfähigkeit, kontrollieren zu können, was hier geschrieben wird. Nach einem Bericht von James Russel und Michael Fuhr. Pre-8.1 Risiko ist viel geringer, aber ich denke, das Verhalten von pg_utf2wchar_with_len mit einem nicht kompletten letzten Zeichen riskiert einen Buffer Overrun, also gibt es ebenfalls einen Backpatch dieser Logik. Dieser Patch stellt auch sicher, das UTF8 Sequenzen, die die unterstützte Länger überschreiten (welche auch immer das ist) immer als Fehlerfall betrachtet werden, anstatt sie als gültige kürzere Sequenz an einigen Plätzen zu behandeln.

  • Entspanne ein Assert(), dass als zu strikt empfunden wurde in einigen Situationen, wenn unions mit Typen, die typmods enthalten, beteiligt waren. Varianten dieses Fehlverhaltens waren in 8.1 und später bekannt; bin nicht sicher, ob sie in 8.0 und 7.4 möglich sind, aber da der Code soweit zurück existiert, patche ich einfach alle. Nach einem Bericht von Brian Hurt.

  • Aktualisiere xindex.sgml um Operator Familien zu diskutieren.

  • Aktualisiere pg_dump um Unterstützung für das Dumpen von Operator Familien.

  • Addiere CREATE/ALTER/DROP OPERATOR FAMILY Befehle, auch COMMENT ON OPERATOR FAMILY; und addiere
    FAMILY Option zu CREATE OPERATOR CLASS um das Addieren einer Klasse zu einer bereits existierenden
    Klasse zu erlauben. Laut vorangegangener Diskussion. Mann, was für ein ermüdendes Copy&Paste.

  • Füge die Planer Möglichkeit, die Ergebnisse von mergejoinscansel() zu cachen, wieder ein, welche ich beim ersten Umschreiben von EquivalenceClass entfernt hatte um den Patch etwas zu vereinfachen. Aber es ist weiterhin wichtig — in einem 4-Wege Joinproblem hat mergejoinscansel() 40% der Planerzeit gebraucht laut gprof. Verbessere ebenfalls den EquivalenceClass Code um Join RestrictInfos wieder zu benutzen statt für jeden in Betracht gezogenen Join neue zu erzeugen. Dies sichert etwas Speicher aber viel wichtiger verbessert die Effektivität für Caching Planer Infos in Restrictinfos.

Bruce Momjian checkte ein:

  • Nutze autoconfs Built-in sys_siglist Makro AC_DECL_SYS_SIGLIST statt unser eigenes zu erzeugen.

  • Addiere signal.h für sys_siglist Referenz.

  • Nutze sys_siglist[] um die Signalnamen für Signal Exits auszugeben, statt nur die Nummern.

  • Modifiziere SGML makefile um ‘gmake draft’ zu erlauben, ein Draft HTML zu bauen, so das ‘draft’
    jetzt ein Target ist und nicht länger ein Modifier.

  • Addiere zu TODO: “Erzwinge typmod für Funktionseingaben, Funktionsergebnisse und Parameter für
    spi_prepare’d Statements, die von PLs aufgerufen werden.”

  • Addiere zu TODO: “Ziehe in Erwägung, dass der Backgrund Writer die Transaktionsstatusbits updated,
    bevor die Pages geschrieben werden.”

  • Addiere zu TODO: “Ziehe in Erwägung, NUM_CLOG_BUFFERS zu vergrößern.”

  • Aktualisiere Installationsbeschreibung für ein Update um darzulegen, dass dump/restore nicht
    benötigt wird. Von Peter.

  • Kontrolliere openjade Draft-Modus durch die Variable DRAFT, statt dass das Version Tag ‘devel’ ist.

  • Aktualisiere Wortlaut für die Installation, wenn geupgraded wird, um zwischen Major Release Upgrades
    und Minor Updates zu unterscheiden.

  • Modifiziere Draft SGML Instruktionen um DRAFT=Y zu nutzen, denn Rekursion hat verursacht, das HTML doppelt aufgerufen wurde — kein Weg, das Makefile zu verlassen, wenn die Rekursion zurückkehrt.

  • Aktualisiere BSD/OS Plattform für 8.2.

  • In TODO, addiere URL um Tuples bis auf den Header zu schrumpfen.

  • Aktualisiere Win32 Exception Kommentar.

  • Aktualisiere pg_dumpall -f Optionsbeschreibung.

  • In TODO, markiere als erledigt: “Addiere eine GUC Variable um den Tablespace für temporäre Objekte pg_dumpall zu kontrollieren”, nach Albert Cervera Arenys Patch.

  • Albert Cervera Arenys Patch mit Dokumentation von Jaime Casanova um GUC temp_tablespace zu addieren um eine Default Location für temporäre Opjekte bereitzustellen.

  • Geigneter detoast Zugriff auf Bytea Feld pg_trigger.tgargs. Der alte Code könnte einen Servercrash verursachen. Backpatch für 8.2.X.

  • Dave Pages Patch, der eine “Ausgabedatei” Option für pg_dumpall addiert, speziell nützlich für Win32, wo die Ausgabeumleitung für Childprozesse (pg_dump) nicht funktioniert.

  • Entferne Entwicklerliste von TODO, jetzt, da wir URLs haben um auf Diskussionen zu referenzieren.

  • In TODO, markiere als erledigt, “Addiere -f zu pg_dumpall” per Patch von Dave Page.

  • Dave Pages Patch welcher es pg_dumpall erlaubt einen Datenbanknamen anzugeben statt dem Default ‘template1’.

  • Dave Pages Patch welcher --tablespaces-only und --roles-only Optionen zu pg_dumpall addiert.

  • Simon Riggs Patch um WAL Logging zu verhindern, wenn COPY in der gleichen Transaktion fertig ist, die es erzeugt hat.

  • Magnus Haganders Patch der das Bauen von ecpg abschaltet, wenn MSVC genutzt wird und pthreads nicht spezifiziert sind.

  • In pgsql/src/include/port/win32.h, addiere Kommentar über die Exception Liste in beiden winnt.h und ntstatus.h.

  • Entferne Newline von Fehlermeldung denn URL ist weg.

  • Ziehe die Nutzung von FormatMessage() zurück, das tut Fehlerwerte, keine Exception Werte. Zeige auf /include/ntstatus.h für eine Exception Liste, statt auf eine URL.

  • Gib sinnvolle Fehlertexte für abnormale Prozessexits unter Win32 statt Hexcodes aus, nutze FormatMessage().

  • In FAQ, aktualisiere Bruce Momjians Email Adresse.

  • Nutze errhint() für WIN32 SIGTERM Messages, wenn möglich.

  • In pgsql/src/include/port/win32.h, Setze Hexvalues in Großschreibung.

  • Wenn system() unter Win32 versagt, berichte dies als eine Exception, schreibe den Exception Wert in Hex und gib eine URL aus, wo der Wert nachgeschaut werden kann.

== Abgelehnte Patches (bis jetzt) ==

Guido Goldsteins Patch um PL/PythonU Funktionen zu korrigieren; liefert true/false für Booleans zurück statt 1/0. Dies hilft, wenn Trigger Funktionen erstellt werden, die SQL ausgeben. Dies brach auch die meisten Maschinen auf der Buildfarm, da es nur mit Python 2.3 oder höher funktioniert.

Magnus haganders erste Version seines Patches um Warnungen, generiert von VC++ aufzuräumen. Er war zu groß und invasiv und hatte einige Fehler. Er arbeitet an der nächsten Version.

== Eingesandte Patches ==

Arul Shaji sandte eine andere Version seiner Implementation von pg_get_domaindef ein.

Gevik Babakhani sandte eine andere Version seines uuid Patches ein. Peter Eisentraut gab Feedback. Gevik sandte eine andere Version aufgrund der Kommentare ein und addierte Tests.

Jeremy Drake sandte ein paar Versionen seines Patches welches unprivilegierten Usern CREATE LANGUAGE für trustes Languages erlaubt die schon in pg_pltemplate vorhanden sind.

Teodor Sigaev sandte einen Dokumentation Patch ein der das docbook mit Instruktionen für FreeBSD aktualisiert, und einen weiteren, der eine Tabelle mit paarweisen Kompatibilitäten zwischen den verschiedenen Lockmides addiert.

Andrew Dunstan sandte einen Patch ein, der es Leuten erlaubt, die Aliase in pg_type für Parameter in PL/Tcl und PL/PythonU zu nutzen, z.B. integer statt int4.

Pavan Deolasee sandte einen Patch ein welcher den Code zum Verfolgen der ctid Kettenpfade etwas verbessert, wenn dieser und der nächste Tuple im Pfad im gleichen Block sind.

Alvaro Herrera sandte einen Patch ein, der autovacuum in zwei Prozessfamilien separiert, einer ist der “Launcher”, zuständig für Statistikauswertungen und Entscheidungen, wann der Worker gestartet werden soll. Der andere ist der Worker, welcher vom Postmaster unter dem Kommando des Launchers gestartet wird, und ausführt, was der Launcher ihm sagt (durch Setzen von Informationen im Shared Memory).

Pavel Stehule sandte einen Patch ein um Support für ANSI SQL scrollbare Cursor in SPI und PL/PgSQL zu addieren.

Jeremy Drake sandte eine andere Version seines Patches welcher es erlaubt PLs zu installieren ohne Superuser zu sein.


Zum Artikel im Blog…

Datum: Mon, 29 Jan 2007 12:29:06 +0100