Infos über Tabellendefinitionen in einem C/C++ abfragen

Hallo Zusammen!

Ich möchte in einem C/C++ Programm Informationen über eine Tabelle abfragen. Insbesondere möchte ich einzelne Spaltennamen und/oder alle Spaltennamen einer Tabelle abfragen. Zusätzlich möchte ich noch die Datentypen der jeweiligen Spalten in Erfahrung bringen.

Da ich allerdings keine Ahnung von SQL und auch nicht von PostgreSQL habe stehe ich nun vor einem kleinen Problem. Ich hoffe Ihr könnte mir helfen!

Schon mal besten Dank in voraus!

Ich habe jetzt eine Lösung.
Trotzdem Danke fürs lesen!

Du bist egoistisch!

Wie sieht deine Lösung aus? Andere sollten dir helfen, aber du bist nicht bereit, deine Erkenntnisse zu teilen.

Ups … sorry!
Da ich Newbee bin ging ich davon aus, dass die Antwort auf so eine simple Frage niemanden interessieren würde :-).
Da ich eigentlich keine Egoist bin nachfolgend meine Lösung:

  1. mit PQexec eine Anfage an der Server schicken (SELECT * FROM tabelle)
    Die Funktion liefert einen Zeiger auf eine struct PGresult
  2. diesen Zeiger übergibt man der Funktion PQnfields() und erhält die Anzahl der Spalten
  3. jetzt kann man in einer Schleife die Spaltennamen von 0 - n Abfragen indem man die Funktion
    PQfname() verwendet.

Ist eigentlich kein Problem, ich hatte nur die Funktionen nicht gefunden.

Trotz schlechten Starts auf der Seite würde mich dennoch interessieren, ob jemand eine Möglichkeit kennt die Länge eines Feldes zu erfahren welches mit dem Datentyp VARCHAR(n) definiert wurde. PQfsize gibt leider nur -1 zurück und PQgetlength nur die Länge des Inhaltes des Feldes. Ich glaube ich habe im Handbuch gelesen, dass die maximale Feldlänge in den ersten zwei Bytes des Feldes gespeichert wird und dass deshalb der tatsächliche Platzbedarf größer ist als man zunächst vermuten würde. Kann man diese Information, den Inhalt der zwei Bytes, irgendwie abfragen?

Nein. In diesen beiden Bytes ist außerdem noch mehr kodiert: ob der Wert überhaupt komprimiert ist und ob er ausgelagert ist.
Aber darum kümmert sich PG intern - was das Interface zu sehen bekommt, sind schon die richtigen Daten, ohne Verwaltungsoverhead.

Ok, Danke!
Aber kann ich die Länge eines variablen Feldes von der Datenbank bekommen oder muss ich die Länge in meinem Programm fest definieren?

Steht alles in den Tabellen des INFORMATION_SCHEMA:

http://www.postgresql.org/docs/current/static/information-schema.html

Mit dem entsprechenden SELECT auf information_schema.columns bekommst Du die Infos

Danke!
Werde mir die Seite asap ansehen.

Super! Funktioniert perfekt mit folgender Abfrage:
SELECT character_maximum_length, table_name, column_name FROM information_schema.columns WHERE table_name=‘bdusrdat’ AND column_name=‘usrnam’;