PostgreSQL (über C Npgsql-Treiber) liefert die Geometriespalte (PostGIS) wie eine Hex-Zeichenfolge (EWKB wie ich verstehe) für diese Abfrage: Ergebnis (zB): Ist es möglich, es als Blob / Byte-Array oder PostGIS storeem immer als Text zu bekommen Sein nicht ein gutes für Leistung, weil Sie Hexestring zu einem Bytearray umwandeln müssen, bevor Sie lesen. PS. Ich weiß über STAsText, aber ich möchte nicht WKT analysieren, derzeit lese ich von EWKB ohne Probleme. Guys, Im sorry für mein primitives Englisch. Es gibt hier zwei Dinge. Pg verwendet standardmäßig die Text-I / O-Funktionen für Datentypen, und selbst wenn Sie explizit Bytea anfordern. Das Default-Protokoll tauscht weiterhin Bytea als Text im Byteaoutput-Modus aus. PostgreSQL-Clients verwenden standardmäßig das Textmodus-Protokoll, wenn sie mit PostgreSQL sprechen. Wenn Sie eine Geometriespalte auswählen, verwendet PostgreSQL die Textmodusausgabefunktion für den Typ, der geometryout ist. In PostGIS formatiert dies die Daten als Hex für die Ausgabe, da das Textprotokoll keine beliebige Binärdatei übertragen kann, so dass es das rohe On-Disk-Format nicht direkt senden kann. Wenn Sie Funktionen wie STAsBinary verwenden, die Byte zurückgeben. Erhalten Sie immer noch Hex-Ausgabe, wenn Sie das Standardprotokoll verwenden. Seine formatiert wie ein PostgreSQL Bytea Literal als seine konvertiert über die Byteaoutput Einstellung in Text für das Senden an den Client, aber seine noch textual. Der Grund dafür ist, dass das PostgreSQL-Textprotokoll keine beliebigen Binärdaten übertragen kann, ohne dass es verschlüsselt wird. Der Server konvertiert sie daher, nachdem die PostGIS-Funktion binär zurückgegeben wurde. Viele Client-Treiber konvertieren sie automatisch zurück auf Binär auf der Client-Seite, so dass Sie möglicherweise nicht bemerken oder kümmern sich um diese Text-Übersetzung, aber es kann ein Leistungsproblem für sehr hohe Volumen-Anwendungen sein - weshalb PostgreSQL unterstützt eine binäre Protokoll-Modus. Wenn Sie das PostgreSQL-Binärprotokoll in Ihrem Client aktivieren, passieren zwei Dinge: PostgreSQL verwendet anstelle geometryout geometrysend, wenn Sie eine Geometriespalte auswählen. Diese sendet die Geometrie als Byte und PostgreSQL sendet Bytea-Felder direkt als Byteslänge an den Client im Binärprotokoll, anstatt sie über Byteaoutput zu konvertieren. Also, was Sie tun müssen, aktivieren Sie das PostgreSQL-Binärprotokoll in Ihrem Client. Mit libpq youd verwenden PQexecParams mit resultFormat gesetzt. Ich konnte keine Hinweise darauf finden, dass nPgSQL das Binärprotokoll überhaupt unterstützt. Sein ein völlig unabhängiger Treiber, nicht basiert auf libpq. So dass es nicht unterstützt alle Server-und Protokoll-Funktionen. Wenn Sie den Client in den Binärprotokollmodus setzen, brauchen Sie nicht STAsBinary oder STAsEWKB zu verwenden. Wie geometrysend liefert binäre sowieso. Wenn Sie arent mit dem binären Protokoll theres keine Möglichkeit, un-codierte Binärdatei zu übertragen, weil die Text-Modus-Protokoll nur nicht unterstützen. Unter allen Umständen werden die Geometriedaten noch in einer kompakten Binärform auf Platte gespeichert. Sie müssen STAsBinary oder STAsEWKB verwenden. Wie ich schon sagte am Anfang gibt es keine Möglichkeit, das Standard-I / O-Formular zu ändern. Eine PostGIS-fähige Erweiterung zu nPgSQL könnte dies wahrscheinlich für den Benutzer transparent machen, so dass Sie didn39t haben zu kümmern, aber I39m nicht Kenntnis von einer solchen Erweiterung. (Bearbeitet, um weitere Details hinzuzufügen). Ndash Craig Ringer Mai 11 14 um 13: 44PostgreSQL libpq (C) - Insert binäre Daten 2010/9/30 GOO Creations ltgoocreationsgmailgt: Hallo, I39m sitzen seit Tagen und ich kann es nicht funktionieren: Ich möchte binäre Daten einfügen (Bytea) in meine postgres DB über die c libpq. Was ich habe, ist ein char (eigentlich ein QByteArray) und ich möchte es in die DB einfügen und es von dort wieder abholen. Ich kann keine guten Beispiele oder Tutorials online finden, so kann jeder mir helfen (oder direkt getroffen, um ein Tutorial), wie man binäre Daten einfügen und wieder abrufen Vielen Dank Christoph - Vincenzo Romano bei NotOrAnd Informationstechnologie Software Hardware Networking Training Support-Sicherheit - NICHT QVIETIS MARIBVS NAVTA PERITVS Vincenzo Romano Sorry, ich meine 30.3.5 in v8: postgresql. org/docs/8.4/static/libpq-exec. htmlLIBPQ-EXEC-ESCAPE-BYTEA Es sieht aus wie there39s nicht so etwas In v9, aber - Vincenzo Romano bei NotOrAnd Informationstechnologie Software Hardware Networking Training Support Sicherheit - NICHT QVIETIS MARIBVS NAVTA PERITVS 2010/9/30 Vincenzo Romano ltvincenzo. romanonotorand. itgt: 2010/9/30 GOO Kreationen ltgoocreationsgmailgt: I39m sitzen Tage, und ich kann nicht bekommen, diese zu arbeiten: Ich möchte binäre Daten (bytea) in meine Postgres DB über die c libpq einfügen. Was ich habe, ist ein char (eigentlich ein QByteArray) und ich möchte es in die DB einfügen und es von dort wieder abholen. Ich kann keine guten Beispiele oder Tutorials online finden, so kann jeder mir helfen (oder direkt getroffen, um ein Tutorial), wie man binäre Daten einfügen und abrufen es wieder Vielen Dank Christoph Es sieht aus wie there39s nicht so etwas in v9, though - Vincenzo Romano bei NotOrAnd Informationstechnologie Software Hardware Vernetzung Training Support Sicherheit - NICHT QVIETIS MARIBVS NAVTA PERITVS GOO Creations I39ve hat das schon ohne Erfolg erledigt. Dies ist, was ich bis jetzt habe, um Daten char query quotinsert in table1 (bytes) Werte einzufügen (361) QByteArray chip const char Daten chip-gtdata () const char params const int paramslength const int paramsformat Ergebnis PQexecParams (mDatabase, query, 1 , Inoid, params, paramslength, paramsformat, 0) Das erste Problem, das ich habe, ist, dass I39m nicht sicher, ob const int paramslength I39ve durch die bereits, ohne Erfolg gearbeitet. Dies ist, was ich bis jetzt habe, um Daten char query quotinsert in table1 (Bytes) Werte einzufügen (361) QByteArray Chip ltassignment von Bytesgt const char Daten chip-gtdata () const char params const int paramslength const int paramsformat Ergebnis PQexecParams (mDatabase, 1, inoid, params, paramslength, paramsformat, 0) Das erste Problem, das ich habe ist, dass I39m nicht sicher, ob const int paramslength ist der richtige Weg, um die Länge. Vincenzo Romano hat geschrieben: 2010/9/30 GOO Creationsltgoocreationsgmailgt: I39m sitzen seit Tagen und ich Kann dies nicht funktionieren: Ich möchte binäre Daten (bytea) in meine postgres DB über die c libpq einfügen. Was ich habe, ist ein char (eigentlich ein QByteArray) und ich möchte es in die DB einfügen und es von dort wieder abholen. Ich kann nicht finden, alle guten Beispiele oder Tutorials online, so kann jeder mir helfen (oder direkt getroffen, um ein Tutorial), wie man binäre Daten einfügen und abrufen es wieder Vielen Dank Christoph On 30 September 2010, GOO Creations hat geschrieben: I39m sitzen seit Tagen und ich kann es nicht funktionieren: Ich möchte binäre Daten (bytea) in meine postgres DB über die c libpq einfügen. Was ich habe, ist ein char (eigentlich ein QByteArray) und ich möchte es in die DB einfügen und es von dort wieder abholen. Ich kann keine guten Beispiele oder Tutorials online finden, so kann jeder mir helfen (oder direkt getroffen, um ein Tutorial) auf, wie man binäre Daten einfügen und wieder abholen Gibt es einen Grund, you39re nicht mit der Qt-Datenbank-API It39ll Karte, was Sie tun Viel leichter als mit libpq. (Auch libpq isn39t eine C-API, so vielleicht you39re Denken an etwas anderes, wie libpqxx) GOO Creations Ja, es gibt einen Grund I39m nicht mit Qt39s Bibliotheken. Qt doesn39t kommen mit PSQL als Standardtreiber (dh Sie müssen den Treiber manuell für Qt Postgres herunterladen). I39m Entwicklung eines Plugins für eine Anwendung, die Qt beschränkt, sind keine zusätzlichen depedncies erlaubt. Aber die app hat libpq als dependcy, so I39m in der Lage, das zu nutzen. Chris Ja gibt es einen Grund I39m nicht mit Qt39s Bibliotheken. Qt doesn39t kommen mit PSQL als Standardtreiber (dh Sie müssen den Treiber manuell für Qt Postgres herunterladen). I39m Entwicklung eines Plugins für eine Anwendung, die Qt beschränkt, sind keine zusätzlichen depedncies erlaubt. Aber die app hat libpq als dependcy, so I39m in der Lage, das zu nutzen. Am 30.09.2010 um 08:26 Uhr, GOO Creations hat geschrieben: I39m sitzen für Tage jetzt, und ich kann es nicht funktionieren: Ich möchte binary einfügen Daten (bytea) in meine postgres DB über die c libpq. Was ich habe, ist ein char (eigentlich ein QByteArray) und ich möchte es in die DB einfügen und es von dort wieder abholen. Ich kann nicht alle guten Beispiele oder Tutorials online finden, so kann jeder mir helfen (oder direkt getroffen, um ein Tutorial), wie man binäre Daten einfügen und wieder abholen Gibt es einen Grund, you39re nicht mit der Qt-Datenbank-API It39ll Karte, was Sie tun Viel leichter als mit libpq. (Auch, libpq isn39t eine C-API, so vielleicht you39re Denken an etwas anderes, wie libpqxx) am 30. September 2010 um 11:42 Uhr, GOO Creations hat geschrieben: Ja gibt es einen Grund I39m nicht mit Qt39s Bibliotheken. Qt doesn39t kommen mit PSQL als Standardtreiber (dh Sie müssen den Treiber manuell für Qt Postgres herunterladen). I39m Entwicklung eines Plugins für eine Anwendung, die Qt beschränkt, sind keine zusätzlichen depedncies erlaubt. Aber die app hat libpq als dependcy, so I39m in der Lage, das zu nutzen. Hier ist meine Antwort aus dem vorherigen Ich beantwortete die Frage. Es gibt eine Reihe von Möglichkeiten, um damit umzugehen (mein Favorit bei weitem ist libpqtypes, aber I39m ziemlich voreingenommen): Am Wed, Juli 21, 2010, um 9:27 Uhr, Merlin Moncure schrieb: Am Mo, 19.07.2010 um 8: 14 PM, schrieb Viniciusbra: I39m Entwicklung eines Systems in C und Ich habe einen unsigned char Zeiger, die eine Struktur darstellt und ich möchte es in einer Bytea-Spalte in PostgreSQL zu speichern. Wie kann ich es machen Beispiel: Sie haben mehrere Möglichkeiten:) kodieren Sie den Speicher für die Struktur PQescapeStringConn und senden an PQexec (meine am wenigsten Lieblingsmethode)) richten Sie einen Aufruf zu PQexecParams (mehr Arbeit, aber schneller und kein Escaping) ein Composite-Typ auf dem Server und senden Sie Ihre Struktur in einer klassischen SQL-Methode) verwenden Sie libpqtypes (dies ist die meisten Setup-Arbeit, aber die besten auf lange Sicht) :-) w / libpqtypes: PGbytea b PGresult res PQexecf (conn, (B) PQclear (res) Dank für diesen Tipp, aber soweit ich es verstehe libpqtypes ist nicht Teil der ursprünglichen lipq libary. Dies führt zu dem gleichen Problem wie bei den Qt-Bibliotheken, es wird ein weiteres Dependecy zu meinem Plugin hinzufügen, was nicht erlaubt ist. Am 30.09.2010 um 11:42 Uhr, GOO Creationswrote: Ja es gibt einen Grund I39m nicht mit Qt39s Bibliotheken. Qt doesn39t kommen mit PSQL als Standardtreiber (dh Sie müssen den Treiber manuell für Qt Postgres herunterladen). I39m Entwicklung eines Plugins für eine Anwendung, die Qt beschränkt, sind keine zusätzlichen depedncies erlaubt. Aber die app hat libpq als dependcy, so I39m in der Lage, das zu nutzen. Hier ist meine Antwort aus dem vorherigen Ich beantwortete die Frage. Es gibt eine Reihe von Möglichkeiten, um damit umzugehen (mein Favorit bei weitem ist libpqtypes, aber I39m ziemlich voreingenommen): Am Mi, 21. Juli 2010 um 9:27 Uhr, Merlin Moncurewrote: Am Mo, 19.07.2010 um 8:14 Uhr PM, viniciusbrawrote: I39m Entwicklung eines Systems in C und ich haben einen unsigned char Zeiger, der ein struct darstellt und ich es in einer Bytea-Spalte in PostgreSQL speichern möchte. Wie kann ich es machen Beispiel: Sie haben mehrere Möglichkeiten:) kodieren Sie den Speicher für die Struktur PQescapeStringConn und senden an PQexec (meine am wenigsten Lieblingsmethode)) richten Sie einen Aufruf zu PQexecParams (mehr Arbeit, aber schneller und kein Escaping) ein Composite-Typ auf dem Server und senden Sie Ihre Struktur in einer klassischen SQL-Methode) verwenden Sie libpqtypes (dies ist die meisten Setup-Arbeit, aber die besten auf lange Sicht) :-) w / libpqtypes: PGbytea b PGresult res PQexecf (conn, Ich glaube, es ist nicht so, wie ich es mir vorgestellt habe Dieser Tipp, aber soweit ich es verstehe libpqtypes ist nicht Teil der ursprünglichen lipq libary. Dies führt zu dem gleichen Problem wie bei den Qt-Bibliotheken, es wird ein weiteres Dependecy zu meinem Plugin hinzufügen, was nicht erlaubt ist. Nehmen Sie die Quelle zu libpqtypes, und statische Link es mit Ihrem Plugin. Ja - das müsst ihr über configure aktivieren. Zieht in libptypes nur auf bytea passieren ist wahrscheinlich overkill aber wenn man bedenkt, kann es auf Lager libpq w / o zu viel Aufwand getan werden. Um es zu rechtfertigen, sollten Sie einige der anderen Bibliotheksmerkmale nutzen (insbesondere Array / Composite-Passing, für die es keine vernünftige Methode über den Bestand libpq gibt). Die Syntax von Konstanten für die numerischen Typen ist in Abschnitt 4.1 beschrieben. 2. Die numerischen Typen haben einen vollständigen Satz entsprechender arithmetischer Operatoren und Funktionen. Siehe Kapitel 9 für weitere Informationen. Die folgenden Abschnitte beschreiben die Typen im Detail. Die Typen smallint. Integer. Und Bigint speichern ganze Zahlen, das heißt, Zahlen ohne Bruchteile, der verschiedenen Bereiche. Versuche, Werte außerhalb des zulässigen Bereichs zu speichern, führen zu einem Fehler. Der Typ Integer ist die gängige Wahl, da er die beste Balance zwischen Reichweite, Speichergröße und Performance bietet. Der Smallint-Typ wird in der Regel nur verwendet, wenn der Festplattenspeicher eine Prämie aufweist. Der Bigint-Typ sollte nur verwendet werden, wenn der Bereich des Integer-Typs unzureichend ist, da letzterer definitiv schneller ist. Auf sehr minimalen Betriebssystemen der Bigint-Typ möglicherweise nicht richtig funktionieren, da es auf Compiler-Unterstützung für 8-Byte-Ganzzahlen basiert. Auf solchen Maschinen wirkt bigint wie die ganze Zahl. Aber immer noch acht Bytes Speicher. (Wir kennen keine moderne Plattform, wo dies der Fall ist.) SQL gibt nur die Integer-Typen integer (oder int), smallint. Und Bigint. Die Typenbezeichnungen int2. Int4. Und int8 sind Erweiterungen, die auch von einigen anderen SQL-Datenbanksystemen verwendet werden. Der Typ numerisch kann Zahlen mit einer sehr großen Anzahl von Ziffern speichern und genau Berechnungen durchführen. Es ist besonders für die Lagerung von Geldmengen und anderen Mengen, wo Genauigkeit erforderlich ist, empfohlen. Allerdings ist die Arithmetik auf numerischen Werten sehr langsam im Vergleich zu den Ganzzahl-Typen oder den im nächsten Abschnitt beschriebenen Fließkomma-Typen. Wir verwenden die folgenden Ausdrücke unten: Die Skala einer Zahl ist die Anzahl der Nachkommastellen im Bruchteil, rechts vom Dezimalpunkt. Die Genauigkeit einer Zahl ist die Gesamtzahl der signifikanten Stellen in der ganzen Zahl, dh die Anzahl der Ziffern auf beiden Seiten des Dezimalpunktes. So hat die Zahl 23.5141 eine Genauigkeit von 6 und eine Skala von 4. Ganzzahlen können als eine Skala von Null betrachtet werden. Sowohl die maximale Genauigkeit als auch die maximale Skalierung einer numerischen Spalte können konfiguriert werden. Um eine Spalte vom Typ numerisch zu deklarieren verwenden Sie die Syntax: Die Genauigkeit muss positiv sein, die Skala Null oder positiv. Alternativ: wählt eine Skala von 0. Angeben: ohne Präzision oder Skalierung erstellt eine Spalte, in der numerische Werte von beliebiger Präzision und Skalierung bis zur Implementierungsgrenze für Genauigkeit gespeichert werden können. Eine Spalte dieser Art wird die Eingabewerte nicht auf eine bestimmte Skalierung beschränken, während numerische Spalten mit einer deklarierten Skala Eingabewerte in diese Skala einfügen. (Der SQL-Standard erfordert eine Default-Skalierung von 0, dh Zwang zu ganzzahliger Präzision. Wenn Sie über die Portabilität besorgt sind, geben Sie immer die Genauigkeit und Skalierung explizit an.) Hinweis: Die maximal zulässige Genauigkeit, wenn explizit in der Typ-Deklaration 1000 NUMERIC ohne spezifizierte Genauigkeit unterliegt den in Tabelle 8-2 beschriebenen Grenzwerten. Wenn die Skalierung eines zu speichernden Wertes größer als die deklarierte Skala der Spalte ist, wird das System den Wert auf die angegebene Anzahl von Bruchzahlen umrunden. Wenn dann die Anzahl der Ziffern links vom Dezimalpunkt die deklarierte Genauigkeit minus der deklarierten Skala überschreitet, wird ein Fehler ausgelöst. Numerische Werte werden physikalisch ohne zusätzliche Vor - und Rück-Nullen gespeichert. Somit sind die deklarierte Präzision und der Maßstab einer Säule Maxima, nicht feste Zuweisungen. (In diesem Sinne entspricht der numerische Typ eher zu varchar (n) als zu char (n).) Der tatsächliche Speicherbedarf ist zwei Bytes für jede Gruppe von vier Dezimalstellen plus drei bis acht Byte Overhead. Zusätzlich zu normalen Zahlenwerten erlaubt der numerische Typ den Sonderwert NaN. Nicht-a-Zahl. Jede Operation an NaN ergibt ein weiteres NaN. Wenn Sie diesen Wert als Konstante in einem SQL-Befehl schreiben, müssen Sie Anführungszeichen setzen, z. B. UPDATE-Tabelle SET x NaN. Bei der Eingabe wird die Zeichenfolge NaN in der Groß - / Kleinschreibung ignoriert. Anmerkung: In den meisten Implementierungen des Nicht-Zahl-Konzeptes wird NaN nicht als gleich einem anderen numerischen Wert (einschließlich NaN) betrachtet. Um zu ermöglichen, dass numerische Werte sortiert und in baumbasierten Indizes verwendet werden, behandelt PostgreSQL NaN-Werte als gleich und größer als alle Nicht-NaN-Werte. Die Typen dezimal und numerisch sind gleichwertig. Beide Typen sind Teil des SQL-Standards. Die Datentypen reale und doppelte Genauigkeit sind ungenaue numerische Typen mit variabler Präzision. In der Praxis handelt es sich bei diesen Typen in der Regel um Implementierungen des IEEE-Standards 754 für binäre Gleitpunktarithmetik (Einzel - und Doppelgenauigkeit), soweit der zugrunde liegende Prozessor, das Betriebssystem und der Compiler dies unterstützen. Inexact bedeutet, dass einige Werte nicht exakt in das interne Format konvertiert werden können und als Approximationen gespeichert werden, so dass das Speichern und Abrufen eines Werts leichte Diskrepanzen aufweisen kann. Das Verwalten dieser Fehler und wie sie sich durch Berechnungen ausbreiten, ist das Thema eines ganzen Zweiges der Mathematik und Informatik und wird hier nicht diskutiert, außer für die folgenden Punkte: Wenn Sie genaue Speicherung und Berechnungen (wie für Geldbeträge) benötigen Den numerischen Typ statt. Wenn Sie komplizierte Berechnungen mit diesen Typen für etwas wichtiges tun möchten, besonders wenn Sie auf bestimmte Verhalten in Grenzfällen (Unendlichkeit, Unterlauf) verlassen, sollten Sie die Umsetzung sorgfältig zu bewerten. Der Vergleich von zwei Gleitkommawerten für Gleichheit funktioniert möglicherweise nicht wie erwartet. Auf den meisten Plattformen hat der reale Typ einen Bereich von mindestens 1E-37 bis 1E37 mit einer Genauigkeit von mindestens 6 Dezimalstellen. Der Typ mit doppelter Genauigkeit hat typischerweise einen Bereich von etwa 1E-307 bis 1E308 mit einer Genauigkeit von mindestens 15 Ziffern. Zu große oder zu kleine Werte führen zu einem Fehler. Eine Rundung kann stattfinden, wenn die Genauigkeit einer Eingangszahl zu hoch ist. Zahlen, die zu null sind, die nicht von Null verschieden sind, verursachen einen Unterlauffehler. Hinweis: Die Einstellung extrafloatdigits steuert die Anzahl der zusätzlichen signifikanten Ziffern, die enthalten sind, wenn ein Gleitkommawert in Text zur Ausgabe konvertiert wird. Mit dem Standardwert 0. Die Ausgabe ist auf allen von PostgreSQL unterstützten Plattformen gleich. Eine Erhöhung wird eine Ausgabe erzeugen, die den gespeicherten Wert genauer wiedergibt, aber möglicherweise nicht portierbar ist. Zusätzlich zu den normalen Zahlenwerten haben die Gleitkomma-Typen mehrere spezielle Werte: Diese repräsentieren die IEEE 754-Sonderwerte infinity. Negative Unendlichkeit. Und nicht-Zahl. beziehungsweise. (Bei einer Maschine, deren Gleitpunktarithmetik nicht IEEE 754 entspricht, funktionieren diese Werte vermutlich nicht wie erwartet). Beim Schreiben dieser Werte als Konstanten in einen SQL-Befehl müssen Sie Anführungszeichen setzen, z. B. UPDATE-Tabelle SET x Infinity . Bei der Eingabe werden diese Zeichenfolgen nicht berücksichtigt. Anmerkung: IEEE754 legt fest, dass NaN nicht gleich einem anderen Gleitkommawert (einschließlich NaN) vergleichen sollte. Um zu ermöglichen, dass Gleitkomma-Werte sortiert und in baumbasierten Indizes verwendet werden, behandelt PostgreSQL NaN-Werte als gleich und größer als alle Nicht-NaN-Werte. PostgreSQL unterstützt auch die SQL-Standard-Notationen float und float (p) für die Angabe von ungenauen numerischen Typen. Dabei gibt p die minimal akzeptable Genauigkeit in binären Ziffern an. PostgreSQL akzeptiert Float (1), um zu floaten (24) als Auswahl des realen Typs, während float (25) zu floaten (53) doppelte Genauigkeit wählen. Werte von p außerhalb des zulässigen Bereichs zeichnen einen Fehler. Schwimmer ohne Präzision bedeutet doppelte Genauigkeit. Anmerkung: Vor PostgreSQL 7.4 war die Präzision im Float (p) so viele Dezimalstellen. Dies wurde korrigiert, um dem SQL-Standard zu entsprechen, der angibt, dass die Genauigkeit in binären Ziffern gemessen wird. Die Annahme, dass reale und doppelte Genauigkeit genau 24 und 53 Bits in der Mantisse haben, ist für IEEE-Standard-Gleitkomma-Implementierungen korrekt. Auf Nicht-IEEE-Plattformen könnte es ein wenig aus sein, aber der Einfachheit halber werden die gleichen Bereiche von p auf allen Plattformen verwendet. Die Datentypen serial und bigserial sind keine wahren Typen, sondern lediglich eine Notiz für die Erstellung eindeutiger Identifikatorspalten (ähnlich der AUTOINCREMENT-Eigenschaft, die von einigen anderen Datenbanken unterstützt wird). In der aktuellen Implementierung ist die Angabe von: gleichbedeutend mit der Angabe: So haben wir eine Integer-Spalte erstellt und für ihre Defaultwerte, die aus einem Sequenzgenerator zugewiesen werden sollen, angeordnet. Eine NOT NULL-Einschränkung wird angewendet, um sicherzustellen, dass ein Nullwert nicht eingefügt werden kann. (In den meisten Fällen möchten Sie auch eine UNIQUE - oder PRIMARY KEY-Einschränkung anfügen, um zu verhindern, dass doppelte Werte durch einen Unfall eingefügt werden, dies ist jedoch nicht automatisch.) Schließlich wird die Sequenz als im Besitz der Spalte markiert markiert Wenn die Spalte oder Tabelle fallen gelassen wird. Hinweis: Weil smallserial. Seriell und bigserial unter Verwendung von Sequenzen implementiert werden, können Löcher oder Lücken in der Folge von Werten auftreten, die in der Spalte erscheinen, auch wenn keine Zeilen jemals gelöscht werden. Ein aus der Sequenz zugewiesener Wert wird weiterhin verwendet, auch wenn eine Zeile, die diesen Wert enthält, nie erfolgreich in die Tabellenspalte eingefügt wird. Dies kann beispielsweise der Fall sein, wenn die Einfügungstransaktion zurückrollt. Siehe nextval () in Abschnitt 9.15 für Details. Hinweis: Vor PostgreSQL 7.3, seriell impliziert EINZIGARTIG. Dies ist nicht mehr automatisch. Wenn eine serielle Spalte eine eindeutige Einschränkung oder einen Primärschlüssel haben soll, muss sie genau wie jeder andere Datentyp angegeben werden. Um den nächsten Wert der Sequenz in die serielle Spalte einzufügen, geben Sie an, dass der seriellen Spalte der Standardwert zugewiesen werden soll. Dies kann entweder durch Ausschluss der Spalte aus der Spaltenliste in der INSERT-Anweisung oder durch die Verwendung des DEFAULT-Schlüsselwortes erfolgen. Die Typenbezeichnungen serial und serial4 sind äquivalent: beide erzeugen Integer-Spalten. Die Typenbezeichnungen bigserial und serial8 funktionieren auf die gleiche Weise, außer dass sie eine Bigint-Spalte erstellen. Bigserial sollte verwendet werden, wenn Sie die Verwendung von mehr als 2 31 Identifikatoren über die Lebensdauer der Tabelle zu antizipieren. Die Sequenz, die für eine serielle Spalte erstellt wurde, wird automatisch gelöscht, wenn die Besitzspalte gelöscht wird. Sie können die Sequenz löschen, ohne die Spalte fallen zu lassen, aber dies wird die Entfernung des Spalten-Standard-Ausdrucks erzwingen.
No comments:
Post a Comment