C Funktion als Parameter übergeben zum Befüllen einer Datenbank mit Hilfe der Insert- Funktion

Hallo zusammen!

Bin neu hier im Forum und habe folgendes Problem:

Ich möchte gerne auf meinem Raspberry Pi lokal eine Datenbank laufen lassen, in welcher Daten aus einem Sensor kommend, gespeichert werden.
Das ganze funktioniert bis jetzt ganz gut nur hab ich das Problem, dass ich die Daten welche ich aus einer Funktion namens read_adc_voltage(1, 0) herausbekomme und den Datentyp double besitzen nicht in die Datenbank speichern kann. Die Ausgabe auf der Konsole funktioniert.

Geschrieben hab ich das Programm in C und er meckert an dieser Stelle:

res = PQexec(conn, "INSERT INTO Kaffeemaschine_M1 VALUES(current_timestamp, read_adc_voltage(1, 0), 1, 1)");

Und spuckt folgende Fehlermeldung aus:

Keine Funktion stimmt mti dem angegebenen Namen und Argumenttypen überein. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen.

Wenn ich anstatt der Funktion irgend ne Zahl übergeb funzt das Ganze ohne Probleme.

Gebaut wird die Tabelle der Datenbank mit folgendem Befehl:

res = PQexec(conn, "CREATE TABLE Kaffeemaschine_M1(Zeit timestamp, i_t double precision, i_eff double precision, Leistung double precision)");

Kann ich keine Funktion als Parameter in die Insert Funktion von Postgresql übergeben? Bzw wie schaff ich es zu einem Ergebnis zu kommen?

Danke schonmal im Voraus und viele Grüße!

homescanner

doch, das ist prinzipiell kein Problem. Wie ist die Funktion definiert, kannst Du ein select read_adc_voltage(1,0) denn direkt ausführen?

Die Funktion steht in nem c header drin und wird über mein c skript aufgerufen in dem ich auch die Datenbank baue.

Also einfach select vor die funktion schreiben? Ich probiere es nachher mal aus.

Danke schonmal!

Wenn ich anstatt der Funktion irgend ne Zahl übergeb funzt das Ganze ohne Probleme.

Wenn du die Funktion direkt im Insert verwendest, dann muss es diese Funktion in der Datenbank geben. Denn das insert führt PostgreSQL aus und nicht dein C-Binary. Das insert wird dabei vollständig als Zeichenkette an PostgreSQL übergeben.

Du musst also in deinem C-Programm das Ergebnis von read_adc_voltag in einer Variable Zwischenspeichern und dann beim Insert verwenden. Entweder direkt in das Insert-Kommando einfügen oder besser als Binde-Variable übergeben.

Gruß frastr