Postgresql binärer Datentyp

Postgresql binärer Datentyp
Der binäre Datentyp ist ein weiterer nützlicher Datentyp von PostgreSQL zum Speichern von Binärzeichendaten. Die Abfolge von Bytes oder Oktetten wird in der binären Zeichenfolge gespeichert. Das Nullwert-Oktett und die nicht druckbaren Oktetten können im Bereich des binären Datentyps gespeichert werden. Die rohen Bytes werden von den binären Saiten gespeichert. Der Eingangswert der binären Zeichenfolge kann von der genommen werden 'Hex' oder 'Flucht' Das Format und das Format der Ausgabe hängen vom Konfigurationsparameter ab, bytea_output. Das Standardausgabeformat lautet 'verhexen''. Der Blob oder das binäre große Objekt wird durch den SQL -Standard als Binärstringentyp definiert. In diesem Tutorial wurden verschiedene Formate und die Verwendung von Binärdatentypen in PostgreSQL gezeigt.

Voraussetzungen:

Sie müssen die neueste Version von PostgreSQL -Paketen auf dem Linux -Betriebssystem installieren, bevor Sie die in diesem Tutorial gezeigten SQL -Anweisungen ausführen. Führen Sie die folgenden Befehle aus, um die Postgresql zu installieren und zu starten:

1
2
3
$ sudo apt-get -y install postgresql postgresql-contrib
$ sudo systemctl starten postgresql.Service

Führen Sie den folgenden Befehl aus, um sich mit Root -Erlaubnis bei PostgreSQL anzumelden:

1
$ sudo -u postgres psql

Bytea -Hex -Format:

Die binären Daten werden als zwei hexadezimale Ziffern pro Byte in codiert verhexen Format. Der Binärqualität geht die Sequenz \ x voraus. Die hexadezimalen Ziffern können entweder Großbuchstaben oder Unterkoffer sein. Dieses Format wird durch eine Vielzahl externer Anwendungen unterstützt.

Beispiel:

1
# Wählen Sie E '\\ XABC0110' als hex_format;

Bytea Escape Format:

Der fliehen Format ist das traditionelle PostgreSQL -Format. Eine Abfolge von ASCII -Zeichen wird verwendet, um die Binärdaten im Escape -Format darzustellen. Die binäre Zeichenfolge wird in einen dreistelligen Oktalwert umgewandelt, vor dem zwei Backslashes vorangegangen sind.

Bytea buchstäblich entkommen Oktette:

Dezimalwert Beschreibung Entkommene Eingabe Beispiel Ausgang
0 Null Oktett E '\\ 000' Wählen Sie e '\\ 000' :: bytea; \ x00
45 Bindestrich '-' oder e '\\ 055' Wählen Sie e '\-' :: bytea; \ x2d
110 'N' 'n' oder e '\\ 156' Wählen Sie e '\ n' :: bytea; \ x6e
0 bis 31 und 127 bis 255 Nicht druckbare Oktetten E '\\ xxx' (Oktalwert) Wählen Sie e '\\ 001' :: bytea; \ x01

Bytea -Ausgang entging Oktetten:

Dezimalwert Beschreibung Entkommene Ausgabe Beispiel Ausgang
45 Bindestrich - Wählen Sie e '\\ 055' :: bytea; -
32 bis 126 Druckbare Oktetten Jeder druckbare Charakter Wählen Sie e '\\ 156' :: bytea; N
0 bis 31 und 127 bis 255 Nicht druckbare Oktetten \ xxx (Oktalwert) Wählen Sie e '\\ 001' :: bytea; \ 001

Verwendung des binären Datentyps in PostgreSQL:

Bevor Sie eine Tabelle mit dem Booleschen Datentyp erstellen, müssen Sie eine PostgreSQL -Datenbank erstellen. Führen Sie also den folgenden Befehl aus, um eine Datenbank mit dem Namen 'zu erstellentestdb':

1
# Datenbank testdb erstellen;

Nach dem Erstellen der Datenbank wird die folgende Ausgabe angezeigt:

Beispiel 1: Erstellen Sie eine Tabelle mit einem binären Datentyp, um den Oktalwert zu speichern

Erstellen Sie eine Tabelle mit dem Namen 'TBL_BINY_1'In der aktuellen Datenbank mit zwei Feldern. Der erste Feldname ist Ausweis Welches ist der Hauptschlüssel der Tabelle. Der Wert dieses Feldes wird automatisch erhöht, wenn ein neuer Datensatz eingefügt wird. Der zweite Feldname ist Binärdaten und der Datentyp ist Bytea.

1
2
3
4
# TABLE TBL_BINY_1 CREATE TABLE CREATE
Id serielle Primärschlüssel,
Binary_Data Bytea);

Die folgende Ausgabe erscheint nach Ausführung der obigen Abfrage:

Führen Sie die folgende Einfügungsabfrage aus, die zwei Oktalwerte in die einfügt TBL_BINY_1 Tisch:

1
2
3
4
5
# In TBL_BINY_1 (BINARY_DATA) einfügen
WERTE
(E '\\ 055'),
(E '\\ 156');

Die folgende Ausgabe erscheint nach Ausführung der obigen Abfrage:

Führen Sie die folgende Auswahlabfrage aus, mit der alle Datensätze aus dem gelesen werden TBL_BINY_1 Tisch:

1
# Aus TBL_BINY_1 auswählen;

Nach der Ausführung der obigen Abfrage wird die folgende Ausgabe angezeigt. Die Ausgabe zeigt den hexadezimalen Wert des Oktalwerts.

Beispiel 2: Erstellen Sie eine Tabelle mit einem binären Datentyp, um Bilddaten zu speichern

Erstellen Sie eine Tabelle mit dem Namen 'TBL_BINY_2'In der aktuellen Datenbank mit drei Feldern. Der erste Feldname ist Ausweis Dies ist der Hauptschlüssel der Tabelle und der Wert dieses Feldes wird automatisch erhöht, wenn ein neuer Datensatz eingefügt wird. Der zweite Feldname ist Image_Name und der Datentyp ist Varchar (20). Der Bildname wird in diesem Feld gespeichert. Der dritte Feldname ist Image_data und der Datentyp dieses Feldes ist Bytea. Die Bilddaten werden in diesem Feld gespeichert.

1
2
3
4
5
# TABLE TBL_BINY_2 CREATE TABLE CREATE
Id serielle Primärschlüssel,
Image_Name varchar (20),
Image_Data Bytea);

Nach der Ausführung der obigen Abfrage wird die folgende Ausgabe angezeigt.

Fügen Sie ein Bild mit PHP in die Tabelle ein:

Erstellen Sie eine PHP -Datei mit dem Namen Bild einfügen.Php mit dem folgenden Code, der den Inhalt einer Bilddatei liest. Speichern Sie das Bild dann in der PostgreSQL -Tabelle, nachdem Sie es in Binärdaten konvertiert haben.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// Fehlereinstellung anzeigen
ini_set ('display_errors', 1);
ERROR_REPORTING (E_ALL);
$ host = "localhost";
$ user = "postgres";
$ pass = "12345";
$ db = "testdb";
// Datenbankverbindungsobjekt erstellen
$ db_connection = pg_connect ("host = $ host dbname = $ db user = $ user password = $ pass"))
oder sterben ("konnte keine Verbindung zum Server \ n" herstellen);
$ Dateiname = "Blume.png ";
$ image = fopen ($ Dateiname, 'r') oder sterben ("Die Datei kann nicht geöffnet werden.");
$ data = fread ($ image, filesize ($ fileName));
$ cdata = pg_escape_bytea ($ data);
fcLose ($ image);
// die Bilddaten einfügen
$ query = "In TBL_BINY_2 (Image_Name, Image_Data) Werte ('$ Dateiname', '$ cdata') einfügen;
$ result = pg_query ($ db_connection, $ query);
Wenn ($ result) echo "Bilddaten werden erfolgreich eingefügt.";
pg_close ($ db_connection);
?>

Die folgende Ausgabe wird angezeigt, nachdem das obige Skript vom lokalen Server ausgeführt wurde und die Bilddatei im aktuellen Ort vorhanden ist:

Lesen Sie die Bilddaten aus der Tabelle mit PHP:

Erstellen Sie eine PHP -Datei mit dem Namen get_image.Php mit dem folgenden Code, der die Binärdaten einer Bilddatei liest. Erstellen Sie das Bild aus den Binärdaten und zeigen Sie das Bild im Browser an.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// Fehlereinstellung anzeigen
ini_set ('display_errors', 1);
ERROR_REPORTING (E_ALL);
$ host = "localhost";
$ user = "postgres";
$ pass = "12345";
$ db = "testdb";
// Datenbankverbindungsobjekt erstellen
$ db_connection = pg_connect ("host = $ host dbname = $ db user = $ user password = $ pass"))
oder sterben ("konnte keine Verbindung zum Server \ n" herstellen);
// Lesen Sie die Bilddaten aus der Tabelle aus
$ query = "Image_data aus TBL_BINY_2 WHO ID ID = 1";
$ result = pg_query ($ db_connection, $ query) oder sterben (pg_last_error ($ db_connection));
$ data = pg_fetch_result ($ result, 'image_data');
$ cimage = pg_unescape_bytea ($ data);
// Erstellen Sie eine Bilddatei mit den aus der Tabelle abgerufenen Bilddaten
$ Dateiname = "myfile.JPG ";
$ image = fopen ($ Dateiname, 'wb') oder sterben ("Image kann nicht geöffnet werden.");
FWrite ($ image, $ cimage) oder sterben ("Daten nicht schreiben können.");
fcLose ($ image);
pg_close ($ db_connection);
// Zeigen Sie das Bild im Browser an
echo "";
?>

Das generierte Bild aus den Bilddaten wird nach der Ausführung des obigen Skripts vom lokalen Server angezeigt.

Abschluss:

Der Zweck der Verwendung von Binärdatentypen und unterschiedlichen Verwendungen von Binärdaten in PostgreSQL wurde in diesem Tutorial gezeigt, das dem neuen PostgreSQL -Benutzer hilft, mit dem binären Datentyp zu arbeiten.