Newer
Older
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
Möglicherweise ist der virtuelle Speicher verbraucht oder Dein Kernel
hat eine niedrige Grenze für bestimmte Ressourcen. Versuche dieses,
bevor Du den postmaster startest:
ulimit -d 65536
limit datasize 64m
Je nach Deiner eingesetzten Shell mag nur einer dieser Befehle
funktionieren. Aber es wird die Grenze des Datensegments für Prozesse
erhöhen und vielleicht läuft so Dein Query durch. Dieser Befehl wirkt
sich auf den aktuellen Prozess und alle seine Unterprozesse aus, die
nach diesem Befehl gestartet werden. Falls Du ein Problem mit dem
SQL-CLient hast, weil das Backend zu viele Daten zurückliefert,
versuche diesen Befehl, bevor Du den SQL-Client startest.
4.20) Wie kann ich feststellen, welche PostgreSQL-Version ich laufen habe?
Gib in psql SELECT version(); ein
4.21) Beim Arbeiten mit "large-object" kommt die Fehlermeldung: invalid
large obj descriptor. Warum?
Du solltest die Befehle BEGIN WORK und COMMIT bei jeden Gebrauch von
Large Objects benutzen. Also um lo_open ... lo_close.
Die Dokumentation hat schon immer darauf hingewiesen, daß lo_open in
eine Transaktion eingebunden werden muß, aber die PostgreSQL Versionen
vor 6.5 haben diese Regel nicht erzwungen. Statt dessen scheiterten
sie gelegentlich, wenn Du diese Regel gebrochen hattest.
Das aktuelle PostgreSQL erzwingt diese Regel, indem es die Handles der
Large Objects beim COMMIT der Transaktion schließt, was sofort nach
dem lo_open passiert, wenn Du nicht innerhalb einer Transaktion bist.
So führt der erste Versuch, etwas mit dem Large Object zu machen zu
einem invalid large obj descriptor. Also wird der Code, der bisher
benutzt wurde, nun diese Fehlermeldung erzeugen, wenn Du keine
Transaktionen benutzt hast.
Falls Du eine Client-Schnittstelle wie ODBC benutzt, kann es sein, daß
Du auto-commit off setzen mußt.
_________________________________________________________________
PostgreSQL erweitern
5.1) Ich habe eine benutzerdefinierte Funktion geschrieben. Wenn ich sie in
psql aufrufe, kommt ein core dump. Warum?
Dieses Problem kann viele Ursachen haben. Teste deine Funktion zuerst
in einem Extra-Testprogramm. Stelle außerdem sicher, daß Deine
Funktion nicht etwa elog-Nachrichten sendet, wenn der Client Daten
erwartet, wie in den type_in() oder type_out() Funktionen
5.2) Was bedeutet die Meldung: NOTICE:PortalHeapMemoryFree: 0x402251d0 not
in alloc set!?
Du pfreest etwas, das Du nicht palloct hast! Stelle sicher, daß Du
nicht malloc/free und palloc/pfree durcheinanderwürfelst.
5.3) Wie kann ich ein paar elegante neue Feldtypen und Funktionen zu
PostgreSQL beitragen?
Sende Deine Erweiterungen zur pgsql-hackers Mailing Liste, und sie
werden eventuell im contrib/ Verzeichnis enden.
5.4) Wie schreibe ich eine Funktion in C, die einen Tuple zurückliefert?
Das erfordert derart extreme Genialität, daß die Autoren es niemals
versucht haben, obwohl es im Prinzip zu machen wäre.
5.5) Ich habe eine der Quellendateien geändert. Warum macht sich die
Änderung beim erneuten Compilerlauf nicht bemerkbar?
Die Makefiles finden nicht die richtigen Abhängigkeiten. Du mußt ein
make clean und dann ein weiteres make machen.