2009-04-17 6 views
2

Betrachten Sie den folgenden Text aus dem PostgreSQL documentation auf binäre Kopieren zu machen:Der Versuch, Sinn für Postgres' Binärkopie Format in C#

11-Byte-Sequenz PGCOPY \ n \ 377 \ r \ n \ 0 - note dass das Nullbyte ein erforderlicher Teil der Signatur ist. (Die Signatur ausgelegt ist leicht Identifizierung von Dateien zu ermöglichen, die durch eine nicht-8-Bit-clean Transfer munged gewesen. Diese Signatur wird von end-of-line-Übersetzungs Filter geändert werden, fallen gelassen Null-Bytes sank High-Bits, oder Paritätsänderungen.)

ich den Rest des Headers ok schaffen kann, aber was \ 377 gemeint? Ich dachte, der größte Wert, den Sie in einem einzelnen Byte haben könnten, war 256?

Auch im Beispiel:

0000000 P G C O P Y \n 377 \r \n \0 \0 \0 \0 \0 \0 
0000020 \0 \0 \0 \0 003 \0 \0 \0 002 A F \0 \0 \0 013 A 
0000040 F G H A N I S T A N 377 377 377 377 \0 003 
0000060 \0 \0 \0 002 A L \0 \0 \0 007 A L B A N I 
0000100 A 377 377 377 377 \0 003 \0 \0 \0 002 D Z \0 \0 \0 
0000120 007 A L G E R I A 377 377 377 377 \0 003 \0 \0 
0000140 \0 002 Z M \0 \0 \0 006 Z A M B I A 377 377 
0000160 377 377 \0 003 \0 \0 \0 002 Z W \0 \0 \0 \b Z I 
0000200 M B A B W E 377 377 377 377 377 377 

Was die gleichen 377 Werte repräsentieren, wie ich das Format interpretieren, sollten sie sie nicht \ 0 ist sein?

Wenn jemand mit dem Rest des Formats helfen könnte, würde es geschätzt werden. Ich könnte betrügen und verwenden Sie die CVS-Datenbank kopieren, aber mit der Anzahl der Zeilen, die ich kopieren muss (in Millionen) Ich verstehe das Binärformat hätte viele Vorteile in der Geschwindigkeit über die CVS.

+1

"aber mit der Anzahl der Zeilen, die ich (in Millionen) kopieren muss, verstehe ich, dass das Binärformat viele Vorteile in der Geschwindigkeit gegenüber dem CVS haben würde." Wenn Sie das noch einmal tun müssen, wird es sicher. Aber wenn Sie es nur einmal tun müssen, ist es wahrscheinlich schneller, nur den langsameren Speicherauszug auszuführen, als Ihre Zeit damit zu verbringen, das schnellere Format zu implementieren. – kquinn

Antwort

4

Die \377 ist Oktal - Dezimalwert 255 wird Gab es etwas anderes über das Format, die speziell Sie war verwirrend?

+0

, die eine Menge beantwortet, vor allem, warum zum Beispiel '013' war die Länge a der Wert, aber war tatsächlich weniger als das in der Länge. Das macht viel mehr Sinn. Vielen Dank. – Ash

1

Mit dem Binärformat werden Sie keine wesentliche Beschleunigung erzielen. Es hat verschiedene Vorteile, aber das Laden der Daten schneller ist nicht wirklich einer von ihnen.

Verwenden Sie einfach Standard-csv und COPY-Befehl und Sie sollten in Ordnung sein.