PostgreSQL binær datatype

PostgreSQL binær datatype
Den binære datatypen er en annen nyttig datatype PostgreSQL for å lagre binære strengdata. Sekvensen av byte eller oktetter lagres i den binære strengen. Nullverdi-oktetten og de ikke-utskrivbare oktettene kan lagres i feltet med den binære datatypen. De rå byte lagres av de binære strengene. Inngangsverdien til den binære strengen kan tas av 'Hex' eller 'Escape' Format og formatet på utgangen avhenger av konfigurasjonsparameteren, BYTEA_OUTPUT. Standard utgangsformat er 'hex'. Blob eller binær store objekt er definert av SQL -standarden som den binære strengtypen. Ulike formater og bruken av binære datatyper i PostgreSQL er vist i denne opplæringen.

Forutsetninger:

Du må installere den nyeste versjonen av PostgreSQL -pakker på Linux -operativsystemet før du utfører SQL -uttalelsene som vises i denne opplæringen. Kjør følgende kommandoer for å installere og starte PostgreSQL:

1
2
3
$ sudo apt-get -y installer postgreSql postgreSql-contrib
$ sudo SystemCTL Start PostgreSql.service

Kjør følgende kommando for å logge inn på PostgreSQL med rottillatelse:

1
$ sudo -u postgres psql

Bytea Hex -format:

De binære dataene er kodet som to heksadesimale sifre per byte i hex format. Den binære strengen er gitt av sekvensen, \ x. Heksadesimale sifrene kan være enten store bokstaver eller små bokstaver. Dette formatet støttes av et bredt spekter av eksterne applikasjoner.

Eksempel:

1
# Velg e '\\ xabc0110' som hex_format;

Bytea Escape Format:

De flukt Formatet er det tradisjonelle PostgreSQL -formatet. En sekvens av ASCII -tegn brukes til å representere de binære dataene i rømningsformat. Den binære strengen omdannes til en tresifret oktalverdi foran med to tilbakeslag.

Bytea Literal rømte oktetter:

Desimalverdi Beskrivelse Slapp unna inngang Eksempel Produksjon
0 Null oktett E '\\ 000' Velg E '\\ 000' :: Bytea; \ x00
45 Bindestrek '-' eller e '\\ 055' Velg E '\-' :: Bytea; \ x2d
110 'n' 'n' eller e '\\ 156' Velg E '\ n' :: Bytea; \ x6e
0 til 31 og 127 til 255 Ikke-utskrivbare oktetter E '\\ xxx' (oktal verdi) Velg E '\\ 001' :: Bytea; \ x01

Bytea -utgang slapp unna oktetter:

Desimalverdi Beskrivelse Slapp unna utdata Eksempel Produksjon
45 Bindestrek - Velg E '\\ 055' :: Bytea; -
32 til 126 Utskrivbare oktetter Enhver utskrivbar karakter Velg E '\\ 156' :: Bytea; n
0 til 31 og 127 til 255 Ikke-utskrivbare oktetter \ xxx (oktal verdi) Velg E '\\ 001' :: Bytea; \ 001

Bruk av binær datatype i PostgreSQL:

Før du oppretter en tabell med den boolske datatypen, må du opprette en PostgreSQL -database. Så kjør følgende kommando for å opprette en database som heter 'Testdb':

1
# Opprett databasetestdb;

Følgende utdata vises etter å ha opprettet databasen:

Eksempel 1: Lag en tabell med en binær datatype for å lagre oktalverdi

Lag en tabell som heter 'tbl_binary_1'I den nåværende databasen med to felt. Det første feltnavnet er id som er den primære nøkkelen til tabellen. Verdien av dette feltet vil bli økt automatisk når en ny post vil sette inn. Det andre feltnavnet er Binary_data Og datatypen er Bytea.

1
2
3
4
# Opprett tabell TBL_BINARY_1 (
ID Seriell primærnøkkel,
binær_data bytea);

Følgende utgang vises etter utførelse av spørringen ovenfor:

Kjør følgende sett inn spørring som vil sette inn to oktale verdier i tbl_binary_1 bord:

1
2
3
4
5
# Sett inn i tbl_binary_1 (binary_data)
Verdier
(E '\\ 055'),
(E '\\ 156');

Følgende utgang vises etter utførelse av spørringen ovenfor:

Kjør følgende velger spørring som vil lese alle poster fra tbl_binary_1 bord:

1
# Velg * fra tbl_binary_1;

Følgende utdata vises etter utførelsen av spørringen ovenfor. Utgangen viser den heksadesimale verdien av oktalverdien.

Eksempel-2: Lag en tabell med en binær datatype for å lagre bildedata

Lag en tabell som heter 'tbl_binary_2'I den nåværende databasen med tre felt. Det første feltnavnet er id som er den primære nøkkelen til tabellen, og verdien av dette feltet vil bli økt automatisk når en ny post blir satt inn. Det andre feltnavnet er Image_name Og datatypen er Varchar (20). Bildenavnet vil bli lagret i dette feltet. Det tredje feltnavnet er image_data Og datatypen til dette feltet er Bytea. Bildedataene vil bli lagret i dette feltet.

1
2
3
4
5
# Opprett tabell TBL_BINARY_2 (
ID Seriell primærnøkkel,
Image_name varchar (20),
image_data bytea);

Følgende utdata vises etter utførelsen av spørringen ovenfor.

Sett inn et bilde i tabellen ved hjelp av PHP:

Opprett en PHP -fil som heter INSERT_IMAGE.PHP med følgende kode som vil lese innholdet i en bildefil. Oppbevar deretter bildet i PostgreSQL -tabellen etter å ha konvertert det til binære data.

1
2
3
4
5
6
7
8
9
10
11
12
1. 3
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
// Vis feilinnstilling
ini_set ('display_errors', 1);
error_rapporting (e_all);
$ host = "localhost";
$ bruker = "Postgres";
$ pass = "12345";
$ db = "testdb";
// Opprett databaseforbindelsesobjekt
$ db_connection = pg_connect ("host = $ host dbname = $ db bruker = $ bruker passord = $ pass")
eller dø ("kunne ikke koble til server \ n");
$ filnavn = "blomst.png ";
$ image = fopen ($ filnavn, 'r') eller dø ("Kan ikke åpne filen.");
$ data = Fread ($ image, FilSize ($ filnavn));
$ cdata = pg_escape_bytea ($ data);
fclose ($ image);
// Sett inn bildedataene
$ spørring = "sett inn i tbl_binary_2 (image_name, image_data) verdier ('$ filnavn', '$ cdata')";
$ resultat = pg_query ($ db_connection, $ spørring);
hvis ($ resultat) ekko "bildedata er satt inn.";
PG_CLOSE ($ DB_CONNECTION);
?>

Følgende utdata vises etter å ha utført skriptet ovenfor fra den lokale serveren og bildefilen som finnes på det nåværende stedet:

Les bildedataene fra tabellen ved hjelp av PHP:

Opprett en PHP -fil som heter get_image.PHP Med følgende kode som vil lese de binære dataene fra en bildefil. Lag bildet fra de binære dataene og vis bildet i nettleseren.

1
2
3
4
5
6
7
8
9
10
11
12
1. 3
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
// Vis feilinnstilling
ini_set ('display_errors', 1);
error_rapporting (e_all);
$ host = "localhost";
$ bruker = "Postgres";
$ pass = "12345";
$ db = "testdb";
// Opprett databaseforbindelsesobjekt
$ db_connection = pg_connect ("host = $ host dbname = $ db bruker = $ bruker passord = $ pass")
eller dø ("kunne ikke koble til server \ n");
// Les bildedataene fra tabellen
$ spørring = "Velg Image_Data fra tbl_binary_2 hvor id = 1";
$ resultat = pg_query ($ db_connection, $ spørring) eller die (pg_last_error ($ db_connection));
$ data = pg_fetch_result ($ resultat, 'image_data');
$ cimage = pg_unescape_bytea ($ data);
// Opprett en bildefil med bildedata hentet fra tabellen
$ filnavn = "myfile.jpg ";
$ image = fopen ($ filnavn, 'wb') eller dø ("Kan ikke åpne bilde.");
fwrite ($ image, $ cimage) eller die ("Kan ikke skrive data.");
fclose ($ image);
PG_CLOSE ($ DB_CONNECTION);
// Vis bildet i nettleseren
ekko "";
?>

Det genererte bildet fra bildedataene vises etter å ha utført skriptet ovenfor fra den lokale serveren.

Konklusjon:

Hensikten med å bruke binære datatyper og forskjellige bruksområder av binære data i PostgreSQL er vist i denne opplæringen som vil hjelpe den nye PostgreSQL -brukeren til å jobbe med den binære datatypen.