Type de données binaires postgresql

Type de données binaires postgresql
Le type de données binaires est un autre type de données utile de postgresql pour stocker les données de chaîne binaires. La séquence d'octets ou d'octets est stockée dans la chaîne binaire. L'octet de valeur zéro et les octets non imprimables peuvent être stockés dans le domaine du type de données binaires. Les octets bruts sont stockés par les cordes binaires. La valeur d'entrée de la chaîne binaire peut être prise par le 'Hex' ou 'Escape' Le format et le format de la sortie dépend du paramètre de configuration, bytea_output. Le format de sortie par défaut est 'hexagonal'. Le blob ou le grand objet binaire est défini par la norme SQL comme le type de chaîne binaire. Différents formats et les utilisations des types de données binaires dans PostgreSQL ont été montrés dans ce tutoriel.

Conditions préalables:

Vous devez installer la dernière version des packages PostgreSQL sur le système d'exploitation Linux avant d'exécuter les instructions SQL affichées dans ce tutoriel. Exécutez les commandes suivantes pour installer et démarrer le postgresql:

1
2
3
$ sudo apt-get -y installer postgresql postgresql-contrib
$ sudo systemctl start postgresql.service

Exécutez la commande suivante pour vous connecter à PostgreSQL avec l'autorisation racine:

1
$ sudo -u postgres psql

Format HEX BYTEA:

Les données binaires sont codées sous forme de deux chiffres hexadécimaux par octet dans hexagonal format. La chaîne binaire est précédée par la séquence, \ x. Les chiffres hexadécimaux peuvent être soit majuscules, soit en minuscules. Ce format est pris en charge par une large gamme d'applications externes.

Exemple:

1
# SELECT E '\\ XABC0110' comme HEX_FORMAT;

Format d'évasion Bytea:

Le s'échapper Le format est le format postgresql traditionnel. Une séquence de caractères ASCII est utilisée pour représenter les données binaires au format d'échappement. La chaîne binaire est convertie en une valeur octale à trois chiffres précédé de deux barres à barres.

Bytea littéral a échappé aux octets:

Valeur décimale Description Entrée échappée Exemple Sortir
0 Octet zéro E '\\ 000' Sélectionnez E '\\ 000' :: bytea; \ x00
45 Trait d'union '-' ou e '\\ 055' Sélectionnez E '\ -' :: bytea; \ x2d
110 'n' 'n' ou e '\\ 156' Sélectionnez e '\ n' :: bytea; \ x6e
0 à 31 et 127 à 255 Octets non imprimables E '\\ xxx' (valeur octale) Sélectionnez E '\\ 001' :: bytea; \ x01

Onttea Sortie a échappé aux octets:

Valeur décimale Description Sortie échappée Exemple Sortir
45 Trait d'union - Sélectionnez E '\\ 055' :: bytea; -
32 à 126 Octets imprimables Tout caractère imprimable Sélectionnez E '\\ 156' :: bytea; n
0 à 31 et 127 à 255 Octets non imprimables \ xxx (valeur octale) Sélectionnez E '\\ 001' :: bytea; \ 001

Utilisation du type de données binaires dans PostgreSQL:

Avant de créer une table avec le type de données booléen, vous devez créer une base de données PostgreSQL. Donc, exécutez la commande suivante pour créer une base de données nommée 'testdb':

1
# Créer une base de données testdb;

La sortie suivante apparaîtra après avoir créé la base de données:

Exemple-1: Créez une table avec un type de données binaires pour stocker la valeur octale

Créer une table nommée 'tbl_binary_1'Dans la base de données actuelle avec deux champs. Le premier nom de champ est identifiant qui est la clé principale du tableau. La valeur de ce champ sera incrémentée automatiquement lorsqu'un nouvel enregistrement inséra. Le deuxième nom de champ est données binaires et le type de données est Bytea.

1
2
3
4
# Créer une table tbl_binary_1 (
Clé primaire en série ID,
binary_data bytea);

La sortie suivante apparaîtra après avoir exécuté la requête ci-dessus:

Exécutez la requête d'insertion suivante qui inséra deux valeurs octales dans le tbl_binary_1 tableau:

1
2
3
4
5
# Insérer dans tbl_binary_1 (binary_data)
VALEURS
(E '\\ 055'),
(E '\\ 156');

La sortie suivante apparaîtra après avoir exécuté la requête ci-dessus:

Exécutez la requête de sélection suivante qui lira tous les enregistrements dans le tbl_binary_1 tableau:

1
# Select * from tbl_binary_1;

La sortie suivante apparaîtra après avoir exécuté la requête ci-dessus. La sortie montre la valeur hexadécimale de la valeur octale.

Exemple-2: Créez une table avec un type de données binaires pour stocker les données d'image

Créer une table nommée 'tbl_binary_2'Dans la base de données actuelle avec trois champs. Le premier nom de champ est identifiant qui est la clé principale du tableau et la valeur de ce champ sera incrémentée automatiquement lorsqu'un nouvel enregistrement sera inséré. Le deuxième nom de champ est Image_name et le type de données est Varchar (20). Le nom de l'image sera stocké dans ce champ. Le troisième nom de champ est image_data et le type de données de ce champ est Bytea. Les données d'image seront stockées dans ce domaine.

1
2
3
4
5
# Créer la table tbl_binary_2 (
Clé primaire en série ID,
Image_name Varchar (20),
image_data bytea);

La sortie suivante apparaîtra après avoir exécuté la requête ci-dessus.

Insérez une image dans le tableau à l'aide de PHP:

Créer un fichier PHP nommé Insérer une image.php avec le code suivant qui lira le contenu d'un fichier image. Ensuite, stockez l'image dans la table PostgreSQL après les avoir converties en données binaires.

1
2
3
4
5
6
7
8
9
dix
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
// Afficher le réglage d'erreur
ini_set ('display_errors', 1);
error_reporting (e_all);
$ host = "localhost";
$ user = "Postgres";
$ pass = "12345";
$ db = "testdb";
// Créer un objet de connexion de la base de données
$ db_connection = pg_connect ("host = $ host dbname = $ db user = $ user password = $ pass")
ou mourir ("ne peut pas se connecter au serveur \ n");
$ filename = "fleur.png ";
$ image = fopen ($ nom de fichier, 'r') ou mourir ("Impossible d'ouvrir le fichier.");
$ data = fread ($ image, fileSize ($ nom de fichier));
$ cdata = pg_escape_bytea ($ data);
fclose ($ image);
// insérer les données d'image
$ query = "Insérer dans TBL_BINALY_2 (Image_name, image_data) valeurs ('$ filename', '$ cdata')";
$ result = pg_query ($ db_connection, $ query);
Si ($ résultat) écho "Les données d'image sont insérées avec succès."
pg_close ($ db_connection);
?>

La sortie suivante apparaîtra après avoir exécuté le script ci-dessus depuis le serveur local et le fichier image existant dans l'emplacement actuel:

Lisez les données d'image du tableau à l'aide de PHP:

Créer un fichier PHP nommé get_image.php avec le code suivant qui lira les données binaires d'un fichier image. Créez l'image à partir des données binaires et affichez l'image dans le navigateur.

1
2
3
4
5
6
7
8
9
dix
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
// Afficher le réglage d'erreur
ini_set ('display_errors', 1);
error_reporting (e_all);
$ host = "localhost";
$ user = "Postgres";
$ pass = "12345";
$ db = "testdb";
// Créer un objet de connexion de la base de données
$ db_connection = pg_connect ("host = $ host dbname = $ db user = $ user password = $ pass")
ou mourir ("ne peut pas se connecter au serveur \ n");
// Lire les données de l'image du tableau
$ query = "SELECT Image_data FROM TBL_BINALY_2 WHERE ID = 1";
$ result = pg_query ($ db_connection, $ query) ou die (pg_last_error ($ db_connection));
$ data = pg_fetch_result ($ result, 'image_data');
$ cimage = pg_unescape_bytea ($ data);
// Créer un fichier image avec les données d'image récupérées à partir du tableau
$ filename = "myfile.jpg ";
$ image = fopen ($ nom de fichier, 'wb') ou die ("Impossible d'ouvrir l'image.");
FWrite ($ Image, $ cimage) ou Die ("Impossible d'écrire des données.");
fclose ($ image);
pg_close ($ db_connection);
// Affiche l'image dans le navigateur
écho "";
?>

L'image générée à partir des données d'image apparaîtra après avoir exécuté le script ci-dessus à partir du serveur local.

Conclusion:

Le but de l'utilisation de types de données binaires et des différentes utilisations des données binaires dans PostgreSQL a été montrée dans ce tutoriel qui aidera le nouvel utilisateur de PostgreSQL à travailler avec le type de données binaires.