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 |
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.