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

Programmierung mit PostgreSQL (C#, PHP, Perl, Java, ...)
Antworten
homescanner
Neuer Benutzer
Beiträge: 2
Registriert: Do 14. Jun 2018, 14:17

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

Beitrag von homescanner » Do 14. Jun 2018, 14:46

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:

Code: Alles auswählen

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:

Code: Alles auswählen

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

akretschmer
Erfahrener Benutzer
Beiträge: 7418
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

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

Beitrag von akretschmer » Do 14. Jun 2018, 15:24

doch, das ist prinzipiell kein Problem. Wie ist die Funktion definiert, kannst Du ein select read_adc_voltage(1,0) denn direkt ausführen?
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

homescanner
Neuer Benutzer
Beiträge: 2
Registriert: Do 14. Jun 2018, 14:17

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

Beitrag von homescanner » Do 14. Jun 2018, 15:35

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!

frastr
Benutzer
Beiträge: 37
Registriert: Di 9. Sep 2014, 12:20
Wohnort: Hoyerswerda, Sachsen

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

Beitrag von frastr » Do 14. Jun 2018, 19:15

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

Antworten