Große Datenmengen! Mit Large Objects?

Hallo,

ich möchte aus einer Tabelle die Daten auslesen bzw. hineinschreiben.
Die Daten können unter anderem sehr groß sein. Bis zu 30 MB.

ich lese die Daten im meinem C-Programm im Moment mit PQgetvalue() aus. Da bekomme ich ja für Spalte x, Zeile y (also ein Datenfeld) die Daten mit einem mal.

Wenn jetzt der Inhalt eines Datenfeldes zum Beispiel 30 MB groß ist, möchte ich die Daten byte weise auslesen. (z.b. 4000 Byte)

bei mysql konnte ich das mit mysql_stmt_send_long_data() machen.


Wie mache ich das bei Postgresql???

Geht dies mit Lage Objects???
Mit Large Object tu ich mich allerdings noch ein wenig schwer.
ich weiß, ich kann welche erzeugen mit lo_creat();
mit lo_open() öffnen
und mit lo_read und lo_write Byte weise lesen und schreiben.

Allerdings weis ich nicht wie ich es anwenden muss.
Ich weiß nicht wie ich jedes Datenfeld mit Large Object anspreche, um die Daten byteweise auszulesen oder zu schreiben.

kann mir jemand ein Programmierbeispiel geben??? oder erklären wie ich es realisieren kann???


danke schon mal!!

Für normale Daten kannst du das Ergebnis nicht stückchenweise lesen.

Für large Objects kannst du die Datei (LO sind Dateien auf dem Server) öffnen und dann mit lo_read() jeweils angeben, wieviele Bytes du lesen möchtest.

Ob es so sinnvoll ist, Dateien in einer Datenbank abzulegen, möchte ich an dieser Stelle aber noch einmal in den Raum stellen. Dafür hat man ein Dateisystem.

Hallo,

weiss jemand wie viele ‘large objects’ man in einer Datenbank speichern kann (und wo das in der Dokumentation steht, ich habe die Stelle nicht gefunden)?

Gruss,
Biberwald

PostgreSQL: Frequently Asked Questions (FAQ) for PostgreSQL

Andreas

Hilf mir mal bitte auf die Spruenge, denn ich seh da nichts bzgl. ‘large objects’.

Danke und Gruss,
Biberwald



Maximum number of rows in a table?	unlimited

Andreas

Hm, kann das sein? Wenn ich das richtig verstanden habe, dann bekommt jedes ‘large object’ beim Import eine oid (Object Identifier) zugewiesen. Diese Type wird hier PostgreSQL: Documentation: Manuals: PostgreSQL 8.2: Object Identifier Types mit “unsigned four byte integer” angegeben; also ein endlicher Wertebreich. Und da die oid fuer jedes ‘large object’ als Identifikator dienen muss, kann man folglich nicht beliebig viele ‘large objects’ einfuegen.

Gruss,
Biberwald

Wenn dem so ist, dann sind “unsigned int” 4 Milliarden verschiedene Werte. Sind das zu wenige für dich?

Na ja, koennte knapp werden :slight_smile:

Nein, 4 Milliarden Eintraege wuerden mir natuerlich mehr als reichen. Aber wie Du schon sagst: “Wenn dem so ist”. Ich bin mir eben nicht sicher; die Dokumentation sagt hierzu nicht explizit was. Daher meine Frage in diesem Thread.

Danke und Gruss,
Biberwald

Mein “wenn dem so ist” bezog sich darauf, das ich es auch nicht genau weiss.