PostgreSQL Binarny typ danych

PostgreSQL Binarny typ danych
Binarny typ danych to kolejny użyteczny typ danych PostgreSQL do przechowywania danych binarnych. Sekwencja bajtów lub oktetów jest przechowywana w strumieniu binarnym. Obit o wartości zerowej i nie do nadrukowania można przechowywać w dziedzinie binarnego typu danych. Surowe bajty są przechowywane przez struny binarne. Wartość wejściową łańcucha binarnego może być pobrana przez „sześciokąt” lub „ucieczka” Format i format wyjścia zależy od parametru konfiguracji, Bytea_output. Domyślny format wyjściowy to 'klątwa'. Blob lub duży duży obiekt jest zdefiniowany przez standard SQL jako typ binarny. W tym samouczku pokazano różne formaty i zastosowania binarnych typów danych w PostgreSQL.

Wymagania wstępne:

Musisz zainstalować najnowszą wersję pakietów PostgreSQL w systemie operacyjnym Linux przed wykonaniem instrukcji SQL pokazanych w tym samouczku. Uruchom następujące polecenia, aby zainstalować i uruchom PostgreSQL:

1
2
3
$ sudo apt-get -y instalacja Postgresql PostgreSQL-Contib
$ sudo systemctl start postgresql.praca

Uruchom następujące polecenie, aby zalogować się do PostgreSQL za zgodą root:

1
$ sudo -u postgres psql

Format HEX Bytea:

Dane binarne są kodowane jako dwie cyfry szesnastkowe na bajt w klątwa format. Ciąg binarny jest poprzedzony sekwencją, \ x. Cyfry szesnastkowe mogą być wielkie lub niższe przypadki. Ten format jest obsługiwany przez szeroki zakres aplikacji zewnętrznych.

Przykład:

1
# Wybierz e '\\ xabc0110' jako hex_format;

Format ucieczki bytu:

ucieczka Format to tradycyjny format postgresql. Sekwencja znaków ASCII służy do przedstawienia danych binarnych w formacie ucieczki. Ciąg binarny jest przekonwertowany na trójcyfrową wartość ósemkową poprzedzoną dwoma.

Dosłowne dzielniki bytu:

Wartość dziesiętna Opis Uciekł wejście Przykład Wyjście
0 Zero oktetu E '\\ 000' ' Wybierz e '\\ 000' :: butea; \ x00
45 Łącznik '-' lub e '\\ 055' ' Wybierz e '\-' :: tjtea; \ x2d
110 'N' „n 'lub e' \\ 156” Wybierz e '\ n' :: tjtea; \ x6e
0 do 31 i 127 do 255 Niezwyklejne oktety E '\\ xxx' (wartość ósemka) Wybierz e '\\ 001' :: tystea; \ x01

Wyjście bytei uciekło o oketach:

Wartość dziesiętna Opis Udnikał o wyjściu Przykład Wyjście
45 Łącznik - Wybierz e '\\ 055' :: tystea; -
32 do 126 Okety do druku Dowolny znak do wydruku Wybierz e '\\ 156' :: tjtea; N
0 do 31 i 127 do 255 Niezwyklejne oktety \ xxx (wartość ósemka) Wybierz e '\\ 001' :: tystea; \ 001

Korzystanie z binarnego typu danych w PostgreSQL:

Przed utworzeniem dowolnej tabeli za pomocą logicznego typu danych musisz utworzyć bazę danych PostgreSQL. Uruchom więc następujące polecenie, aby utworzyć bazę danych o nazwie 'testdb::

1
# Utwórz bazę danych testDB;

Po utworzeniu bazy danych pojawi się następujące dane wyjściowe:

Przykład-1: Utwórz tabelę z binarnym typem danych, aby przechowywać wartość ósemkę

Utwórz tabelę o nazwie 'tbl_binary_1„W bieżącej bazie danych z dwoma polami. Pierwsza nazwa pola to ID który jest kluczowym kluczem tabeli. Wartość tego pola zostanie zwiększona automatycznie, gdy nowy rekord wstawię. Druga nazwa pola to dane binarne A typ danych jest Bytea.

1
2
3
4
# Utwórz tabelę tbl_binary_1 (
ID szeregowy klucz podstawowy,
binary_data bytea);

Po wykonaniu powyższego zapytania pojawi się następujące dane wyjściowe:

Uruchom następujące zapytanie, które wstawię dwie wartości ósemkowe do tbl_binary_1 tabela:

1
2
3
4
5
# Wstaw do tbl_binary_1 (binary_data)
Wartości
(E '\\ 055'),
(E '\\ 156');

Po wykonaniu powyższego zapytania pojawi się następujące dane wyjściowe:

Uruchom następujące zapytanie, które przeczyta wszystkie rekordy z tbl_binary_1 tabela:

1
# Wybierz * z tbl_binary_1;

Następujące dane wyjściowe pojawią się po wykonaniu powyższego zapytania. Dane wyjściowe pokazuje wartość heksadecimalną wartości ósemkowej.

Przykład-2: Utwórz tabelę z binarnym typem danych, aby przechowywać dane obrazu

Utwórz tabelę o nazwie 'tbl_binary_2„W bieżącej bazie danych z trzema polami. Pierwsza nazwa pola to ID który jest kluczowym kluczem tabeli, a wartość tego pola zostanie automatycznie zwiększona, gdy zostanie wprowadzony nowy rekord. Druga nazwa pola to Image_name A typ danych jest Varchar (20). Nazwa obrazu będzie przechowywana w tym polu. Trzecie nazwa pola to image_data a typ danych tego pola to Bytea. Dane obrazu będą przechowywane w tym polu.

1
2
3
4
5
# Utwórz tabelę tbl_binary_2 (
ID szeregowy klucz podstawowy,
image_name varchar (20),
image_data bytea);

Następujące dane wyjściowe pojawią się po wykonaniu powyższego zapytania.

Włóż obraz w tabeli za pomocą PHP:

Utwórz plik PHP o nazwie Umieść obraz.php z następującym kodem, który odczytuje zawartość pliku obrazu. Następnie przechowuj obraz w tabeli PostgreSQL po przekształceniu go w dane binarne.

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
// Ustawienie błędów wyświetlania
ini_set („display_errors”, 1);
error_reporting (e_all);
$ host = "localHost";
$ user = "postgres";
$ pass = "12345";
$ db = "testDB";
// Utwórz obiekt połączenia bazy danych
$ db_connection = pg_connect ("host = $ host dbname = $ db user = $ User Hasło = $ pass")
lub die („Nie można połączyć się z serwerem \ n”);
$ filename = "kwiat.png ";
$ image = fopen ($ nazwa pliku, „r”) lub die („Nie można otworzyć pliku.");
$ data = fread ($ image, filesize ($ nazwa pliku));
$ cdata = pg_escape_bytea ($ data);
fclose ($ image);
// Włóż dane obrazu
$ query = "wstaw do tbl_binary_2 (image_name, image_data) wartości ('$ nazwa pliku', '$ cdata')";
$ wynik = pg_query ($ db_connection, $ query);
Jeśli ($ wynik) echo „Dane obrazu są pomyślnie wstawiane.";
pg_close ($ db_connection);
?>

Poniższe dane wyjściowe pojawi się po wykonaniu powyższego skryptu z serwera lokalnego i pliku obrazu istniejącego w bieżącej lokalizacji:

Przeczytaj dane obrazu z tabeli za pomocą PHP:

Utwórz plik PHP o nazwie get_image.php z następującym kodem, który odczytuje dane binarne pliku obrazu. Utwórz obraz z danych binarnych i wyświetl obraz w przeglądarce.

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
// Ustawienie błędów wyświetlania
ini_set („display_errors”, 1);
error_reporting (e_all);
$ host = "localHost";
$ user = "postgres";
$ pass = "12345";
$ db = "testDB";
// Utwórz obiekt połączenia bazy danych
$ db_connection = pg_connect ("host = $ host dbname = $ db user = $ User Hasło = $ pass")
lub die („Nie można połączyć się z serwerem \ n”);
// Odczytaj dane obrazu z tabeli
$ query = "Wybierz image_data z tbl_binary_2 gdzie id = 1";
$ wynik = pg_query ($ db_connection, $ query) lub die (pg_last_error ($ db_connection));
$ data = pg_fetch_result ($ wynik, „image_data”);
$ cimage = pg_unescape_bytea ($ data);
// Utwórz plik obrazu z danymi obrazu pobrane z tabeli
$ filename = "myfile.jpg ";
$ image = fopen ($ nazwa pliku, „wb”) lub die („Nie można otworzyć obrazu.");
fwrite ($ image, $ cimage) lub die („Nie można zapisać danych.");
fclose ($ image);
pg_close ($ db_connection);
// Wyświetl obraz w przeglądarce
Echo "";
?>

Wygenerowany obraz z danych obrazu pojawi się po wykonaniu powyższego skryptu z serwera lokalnego.

Wniosek:

W tym samouczku pokazano cel używania binarnych typów danych i różnych zastosowań danych binarnych w PostgreSQL.