Lists: | Postg무지개 토토SQL : Postg무지개 |
---|
From: | Jessica Ditt <jessica(dot)ditt(at)web(dot)de> |
---|---|
To: | pgsql-de-allgemein(at)postgresql(dot)org |
Subject: | Neuladen von shared objects ??? |
Date: | 2005-05-27 09:54:32 |
Message-ID: | 1117187672.4649.26.camel@localhost.localdomain |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-de-allgemein |
Hallo Ihr,
zur Zeit schreibe ich C-Funktionen für meinen eigenen Datentyp in
Postgres.
Wenn ich den Quelltext geändert habe, werden diese Änderungen jedoch
nach DROP FUNCTION und erneutem CREATE FUNCTION nicht in der Datenbank
übernommen.
Vielleicht kann mir jemand sagen, wie ich Postgres dazu bringe bei der
erneuten Funktionsdeklaration in die neue .so-Datei zu schauen. Da die
Alte durch die Neue ersetzt wurde, muss Postgres die alte Deklaration ja
irgendwo gespeichert haben...
Mein Workaround CREATE DATABASE / DROP DATABASE ist auf die Dauer eher
etwas nervig, und ich bin mir sicher, dass es einen besseren Weg gibt.
Ich kann ihn nur nicht finden...
Ich freu mich über jeden Hinweis.
Viele Grüße
Jessica
From: | Peter Eisentraut <peter_e(at)gmx(dot)net> |
---|---|
To: | Jessica Ditt <jessica(dot)ditt(at)web(dot)de> |
Cc: | pgsql-de-allgemein(at)postgresql(dot)org |
Subject: | Re: Neuladen von shared objects ??? |
Date: | 2005-05-27 10:09:55 |
Message-ID: | 200505271209.56070.peter_e@gmx.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-de-allgemein |
Jessica Ditt wrote:
> Vielleicht kann mir jemand sagen, wie ich Postgres dazu bringe bei
> der erneuten Funktionsdeklaration in die neue .so-Datei zu schauen.
Entweder mit dem Befehl LOAD oder einfach neu verbinden.
--
Peter Eisentraut
http://developer.postgresql.org/~petere/
From: | Jessica Ditt <jessica(dot)ditt(at)web(dot)de> |
---|---|
To: | pgsql-de-allgemein(at)postgresql(dot)org |
Subject: | Re: Neuladen von shared objects ??? |
Date: | 2005-05-27 10:32:02 |
Message-ID: | 1117189922.4649.31.camel@localhost.localdomain |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-de-allgemein |
LOAD war genau das, was ich gesucht hab.
MERCI :)
Am Freitag, den 27.05.2005, 12:09 +0200 schrieb Peter Eisentraut:
> Jessica Ditt wrote:
> > Vielleicht kann mir jemand sagen, wie ich Postgres dazu bringe bei
> > der erneuten Funktionsdeklaration in die neue .so-Datei zu schauen.
>
> Entweder mit dem Befehl LOAD oder einfach neu verbinden.
>
From: | Jessica Ditt <jessica(dot)ditt(at)web(dot)de> |
---|---|
To: | pgsql-de-allgemein(at)postgresql(dot)org |
Subject: | Re: Neuladen von shared objects ??? |
Date: | 2005-05-27 12:41:07 |
Message-ID: | 1117197668.4649.36.camel@localhost.localdomain |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-de-allgemein |
Nachdem ich gerade erst dachte, LOAD würde mein Problem beheben, wurde
ich gerade eines Besseren belehrt.
Trotz erneuten Ladens der shared object-Dateien werden nach wie vor die
alten Funktionen ausgeführt.
Weiß jemand warum?
Am Freitag, den 27.05.2005, 12:09 +0200 schrieb Peter Eisentraut:
> Jessica Ditt wrote:
> > Vielleicht kann mir jemand sagen, wie ich Postgres dazu bringe bei
> > der erneuten Funktionsdeklaration in die neue .so-Datei zu schauen.
>
> Entweder mit dem Befehl LOAD oder einfach neu verbinden.
>
From: | Andreas Seltenreich <seltenreich(at)gmx(dot)de> |
---|---|
To: | Jessica Ditt <jessica(dot)ditt(at)web(dot)de> |
Cc: | pgsql-de-allgemein(at)postgresql(dot)org |
Subject: | Re: Neuladen von shared objects ??? |
Date: | 2005-05-27 13:31:37 |
Message-ID: | 87acmgn6bq.fsf@gate450.dyndns.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | Postg무지개 토토SQL : Postg무지개 |
Jessica Ditt schrob:
> Nachdem ich gerade erst dachte, LOAD würde mein Problem beheben, wurde
> ich gerade eines Besseren belehrt.
> Trotz erneuten Ladens der shared object-Dateien werden nach wie vor die
> alten Funktionen ausgeführt.
Hmm, das würde dann allerdings dem Handbuch widersprechen:
<http://www.postgresql.org/docs/current/static/xfunc-c.html#AEN29728>
--8<---------------cut here---------------start------------->8---
After it is used for the first time, a dynamically loaded object file
is retained in memory. Future calls in the same session to the
function(s) in that file will only incur the small overhead of a
symbol table lookup. If you need to force a reload of an object file,
for example after recompiling it, use the LOAD command or begin a
fresh session.
--8<---------------cut here---------------end--------------->8---
Klappt es denn auch nach dem Start einer neuen Session nicht?
Ich kann mir schlecht vorstellen, daß der Fehler dann bei Postgresql
liegt, da über die Sitzungen hinaus IIRC nur der Name der C-Funktion
und der Dateiname der shared Library gespeichert werden. Der alte Code
käme also nur über eine alte shared Library auf der Platte wieder in
den Speicher der nächsten Sitzung.
Bist du sicher, daß die Library auch korrekt neu übersetzt, und an der
richtigen Stelle abgelegt wurde? Möglicherweise ist es doch ein Bug in
deinem Makefile o.ä.? Ist das ganze vielleicht auf einem störrischen
Dateisystem (Samba, NFS, etc)?
Damit jemand versuchen könnte, das Problem zu reproduzieren, müßtest
du wenigstens noch deine Postgres-Version mitteilen.
Gruß
Andreas
From: | Peter Wullinger <some-mail-drop(at)gmx(dot)net> |
---|---|
To: | Jessica Ditt <jessica(dot)ditt(at)web(dot)de>, pgsql-de-allgemein(at)postgresql(dot)org, seltenreich(at)gmx(dot)de |
Subject: | Re: Neuladen von shared objects ??? |
Date: | 2005-05-27 17:23:27 |
Message-ID: | 20050527172326.GA3739@peter.home.wul |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-de-allgemein |
In epistula a Andreas Seltenreich, die horaque Fri, May 27, 2005 at 03:31:37PM +0200:
> Jessica Ditt schrob:
>
> > Nachdem ich gerade erst dachte, LOAD würde mein Problem beheben, wurde
> > ich gerade eines Besseren belehrt.
> > Trotz erneuten Ladens der shared object-Dateien werden nach wie vor die
> > alten Funktionen ausgeführt.
>
Aus Spaß an der Freude hab ich das mal ausprobiert:
PostgreSQL 8.0.4, FreeBSD 5.4-STABLE, ufs (softupdates)
= pgsql_hello_world.c ==
#include "postgres.h"
#include "fmgr.h"
PG_FUNCTION_INFO_V1(hello_world);
Datum
hello_world(PG_FUNCTION_ARGS)
{
elog(NOTICE, "Hello, world, first version!");
PG_RETURN_INT32(0);
}
= pgsql_hello_world.c ==
% gcc -I/<postgres>/include/server -L<postgres>/lib \
-W -Wall -Wl,-shared -o pgsql_notice.so pgsql_notice.c
psql: ~# CREATE OR REPLACE FUNCTION hello_world()
RETURNS INTEGER LANGUAGE 'C' AS
'/tmp/pgsql_hello_world.so', 'hello_world';
psql: ~# select hello_world();
NOTICE: Hello, world, first version!
= pgsql_hello_world.c ==
#include "postgres.h"
#include "fmgr.h"
PG_FUNCTION_INFO_V1(hello_world);
Datum
hello_world(PG_FUNCTION_ARGS)
{
elog(NOTICE, "Hello, world, second version!");
PG_RETURN_INT32(0);
}
= pgsql_hello_world.c ==
% gcc -I/<postgres>/include/server -L<postgres>/lib \
-W -Wall -Wl,-shared -o pgsql_pgsql_notice.so pgsql_hello_world.c
(in derselben Sitzung):
psql: ~# select hello_world();
NOTICE: Hello, world, first version!
psql: ~# LOAD '/tmp/pgsql_hello_world.so';
psql: ~# select hello_world();
NOTICE: Hello, world, second version!
= pgsql_hello_world.c ==
#include "postgres.h"
#include "fmgr.h"
PG_FUNCTION_INFO_V1(hello_world);
Datum
hello_world(PG_FUNCTION_ARGS)
{
elog(NOTICE, "Hello, world, third version!");
PG_RETURN_INT32(0);
}
= pgsql_hello_world.c ==
% gcc -I/<postgres>/include/server -L<postgres>/lib \
-W -Wall -Wl,-shared -o pgsql_pgsql_notice.so pgsql_hello_world.c
(in neuer Sitzung)
psql: ~# select hello_world();
NOTICE: Hello, world, third version!
> Bist du sicher, daß die Library auch korrekt neu übersetzt, und an der
> richtigen Stelle abgelegt wurde? Möglicherweise ist es doch ein Bug in
> deinem Makefile o.ä.? Ist das ganze vielleicht auf einem störrischen
> Dateisystem (Samba, NFS, etc)?
Würde ich auch mal tippen. Wobei ich auch einige Journaling-Dateisysteme
(lacht nicht) zu dem problematischen zählen würde. Dort nimmt man es
mit der Synchronisierbarkeit für Benutzerprogramme oft auch nicht
mehr so genau.
Gruß,
Peter
--
Strebe nicht nach der Gunst der Menge, denn diese ist selten auf
ehrenvolle und rechtmäßige Weise erlangt. Suche stattdessen das
Zeugnis weniger und zähle nicht die Stimmen, sondern gewichte sie.
-- Immanuel Kant
From: | Jessica Ditt <jessica(dot)ditt(at)web(dot)de> |
---|---|
To: | pgsql-de-allgemein(at)postgresql(dot)org |
Subject: | Re: Neuladen von shared objects ??? |
Date: | 2005-05-28 09:02:13 |
Message-ID: | 1117270933.4702.12.camel@localhost.localdomain |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-de-allgemein |
> Hmm, das würde dann allerdings dem Handbuch widersprechen:
Das Handbuch liegt brav vor mir... Erklären kann ich es mir wie gesagt
auch nicht.
>
> Klappt es denn auch nach dem Start einer neuen Session nicht?
Doch, das schon. Auch wenn ich eine neue Datenbank anlege und dort die
Funktionen deklariere, benutzt er die neue (sprich: aktuelle) Version
der Datei.
>
> Ich kann mir schlecht vorstellen, daß der Fehler dann bei Postgresql
> liegt, da über die Sitzungen hinaus IIRC nur der Name der C-Funktion
> und der Dateiname der shared Library gespeichert werden. Der alte Code
> käme also nur über eine alte shared Library auf der Platte wieder in
> den Speicher der nächsten Sitzung.
>
> Bist du sicher, daß die Library auch korrekt neu übersetzt, und an der
> richtigen Stelle abgelegt wurde? Möglicherweise ist es doch ein Bug in
> deinem Makefile o.ä.? Ist das ganze vielleicht auf einem störrischen
> Dateisystem (Samba, NFS, etc)?
An den Makefiles habe ich nichts geändert, sie liefern auch keine
Fehlerausgaben. Die Dateien liegen lokal auf meinem Rechner vor.
>
> Damit jemand versuchen könnte, das Problem zu reproduzieren, müßtest
> du wenigstens noch deine Postgres-Version mitteilen.
Entschuldigung: ich benutze Version 7.4.5 auf einem Rechner mit Fedora
Core 3 (kernel 2.6.9-1.667)...
Apropos Reproduzierbarkeit: Schlagt mich tot, aber ich kann es selbst
nicht 100%ig reproduzieren....
Die Hello-World Funktion zeigt das Verhalten auf jeden Fall nicht, da
gibt er brav first, second, etc aus...
Woran auch immer das Verhalten bei mir liegt, es ist halt wohl bei mir
so und ich danke Euch für Eure Hinweise & Ratschläge!!
VG, Jessica