Tipo de dados binários PostgreSQL

Tipo de dados binários PostgreSQL
O tipo de dados binário é outro tipo de dados útil de PostGresql para armazenar dados de string binária. A sequência de bytes ou octetos é armazenada na corda binária. O octeto de valor zero e os octetos não impressos podem ser armazenados no campo do tipo de dados binários. Os bytes crus são armazenados pelas cordas binárias. O valor de entrada da sequência binária pode ser tomado pelo 'Hex' ou 'Escape' formato e o formato da saída depende do parâmetro de configuração, bytea_output. O formato de saída padrão é 'hexadecimal'. O blob ou objeto grande binário é definido pelo padrão SQL como o tipo de string binária. Diferentes formatos e os usos dos tipos de dados binários no PostgreSQL foram mostrados neste tutorial.

Pré-requisitos:

Você deve instalar a versão mais recente dos pacotes PostGresql no sistema operacional Linux antes de executar as instruções SQL mostradas neste tutorial. Execute os seguintes comandos para instalar e iniciar o PostgreSQL:

1
2
3
$ sudo apt-get -y install postgresql postgresql-contra
$ sudo SystemCtl Iniciar PostgreSQL.serviço

Execute o seguinte comando para fazer login no PostgreSQL com permissão de raiz:

1
$ sudo -u postgres psql

Bytea Hex Formato:

Os dados binários são codificados como dois dígitos hexadecimais por byte em hexadecimal formatar. A sequência binária é precedida pela sequência, \ x. Os dígitos hexadecimais podem ser maiúsculos ou minúsculos. Este formato é suportado por uma ampla gama de aplicações externas.

Exemplo:

1
# Selecione e '\\ xabc0110' como hex_format;

Bytea Escape Format:

O escapar Formato é o formato tradicional PostgreSQL. Uma sequência de caracteres ASCII é usada para representar os dados binários em formato de escape. A corda binária é convertida em um valor octal de três dígitos precedido por duas barras de barriga.

Bytea Literal escapou Octetos:

Valor decimal Descrição Entrada escapada Exemplo Saída
0 Zero octeto E '\\ 000' Selecione e '\\ 000' :: bytea; \ x00
45 Hífen '-' ou e '\\ 055' Selecione e '\-' :: bytea; \ x2d
110 'n' 'n' ou e '\\ 156' Selecione e '\ n' :: bytea; \ x6e
0 a 31 e 127 a 255 Octetos não impressos E '\\ xxx' (valor octal) Selecione e '\\ 001' :: bytea; \ x01

Saída de bytea escapou octetos:

Valor decimal Descrição Saída escapada Exemplo Saída
45 Hífen - Selecione e '\\ 055' :: bytea; -
32 a 126 Octetos imprimíveis Qualquer caractere imprimível Selecione e '\\ 156' :: bytea; n
0 a 31 e 127 a 255 Octetos não impressos \ xxx (valor octal) Selecione e '\\ 001' :: bytea; \ 001

Uso do tipo de dados binário no PostgreSQL:

Antes de criar qualquer tabela com o tipo de dados booleano, você deve criar um banco de dados PostGresql. Então, execute o seguinte comando para criar um banco de dados chamado 'testdb':

1
# Criar banco de dados TestDB;

A saída a seguir será exibida após a criação do banco de dados:

Exemplo 1: Crie uma tabela com um tipo de dados binário para armazenar o valor octal

Crie uma tabela chamada 'tbl_binary_1'No banco de dados atual com dois campos. O primeiro nome de campo é eu ia qual é a chave primária da tabela. O valor desse campo será incrementado automaticamente quando um novo registro será inserido. O segundo nome de campo é binário_data e o tipo de dados é Bytea.

1
2
3
4
# Criar tabela tbl_binary_1 (
Id Id Serial Primary Key,
binário_data bytea);

A saída a seguir aparecerá após a execução da consulta acima:

Execute a seguinte consulta de inserção que insira dois valores octais no tbl_binary_1 mesa:

1
2
3
4
5
# Inserir em tbl_binary_1 (binário_data)
Valores
(E '\\ 055'),
(E '\\ 156');

A saída a seguir aparecerá após a execução da consulta acima:

Execute a seguinte consulta selecionada que lerá todos os registros do tbl_binary_1 mesa:

1
# Selecione * de tbl_binary_1;

A saída a seguir aparecerá após a execução da consulta acima. A saída mostra o valor hexadecimal do valor octal.

Exemplo 2: Crie uma tabela com um tipo de dados binário para armazenar dados de imagem

Crie uma tabela chamada 'tbl_binary_2'No banco de dados atual com três campos. O primeiro nome de campo é eu ia que é a chave primária da tabela e o valor desse campo será incrementado automaticamente quando um novo registro será inserido. O segundo nome de campo é image_name e o tipo de dados é Varchar (20). O nome da imagem será armazenado neste campo. O terceiro nome de campo é image_data e o tipo de dados deste campo é Bytea. Os dados da imagem serão armazenados neste campo.

1
2
3
4
5
# Criar tabela tbl_binary_2 (
Id Id Serial Primary Key,
image_name varchar (20),
image_data bytea);

A saída a seguir aparecerá após a execução da consulta acima.

Insira uma imagem na tabela usando PHP:

Crie um arquivo php nomeado Inserir Imagem.php com o código a seguir que lerá o conteúdo de um arquivo de imagem. Em seguida, armazene a imagem na tabela PostGresql depois de convertê -la em dados binários.

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
// Configuração de erro de exibição
ini_set ('display_errors', 1);
error_reporting (e_all);
$ host = "localhost";
$ user = "PostGres";
$ pass = "12345";
$ db = "testdb";
// Crie objeto de conexão de banco de dados
$ db_connection = pg_connect ("host = $ host dbname = $ db user = $ user senha = $ pass")
ou morrer ("não foi possível se conectar ao servidor \ n");
$ filename = "Flor.png ";
$ imagem = fopen ($ filename, 'r') ou die ("Não é possível abrir o arquivo.");
$ data = fread ($ imagem, arquivo file ($ filename));
$ cdata = pg_escape_bytea ($ dados);
fclose ($ imagem);
// Insira os dados da imagem
$ query = "inserir em tbl_binary_2 (image_name, image_data) valores ('$ filename', '$ cdata')";
$ resultado = pg_query ($ db_connection, $ query);
Se ($ resultado) eco "os dados da imagem forem inseridos com sucesso.";
pg_close ($ db_connection);
?>

A saída a seguir será exibida após a execução do script acima do servidor local e do arquivo de imagem existente no local atual:

Leia os dados da imagem da tabela usando PHP:

Crie um arquivo php nomeado get_image.php com o código a seguir que lerá os dados binários de um arquivo de imagem. Crie a imagem dos dados binários e exiba a imagem no navegador.

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
// Configuração de erro de exibição
ini_set ('display_errors', 1);
error_reporting (e_all);
$ host = "localhost";
$ user = "PostGres";
$ pass = "12345";
$ db = "testdb";
// Crie objeto de conexão de banco de dados
$ db_connection = pg_connect ("host = $ host dbname = $ db user = $ user senha = $ pass")
ou morrer ("não foi possível se conectar ao servidor \ n");
// Leia os dados da imagem da tabela
$ query = "Selecione Image_Data em tbl_binary_2 onde id = 1";
$ resultado = pg_query ($ db_connection, $ query) ou die (pg_last_error ($ db_connection));
$ data = pg_fetch_result ($ resultado, 'image_data');
$ cimage = pg_unescape_bytea ($ dados);
// Crie um arquivo de imagem com os dados da imagem recuperados da tabela
$ filename = "myfile.jpg ";
$ imagem = fopen ($ filename, 'wb') ou die ("Não é possível abrir a imagem.");
fwrite ($ imagem, $ cimage) ou matriz ("Não é possível escrever dados.");
fclose ($ imagem);
pg_close ($ db_connection);
// exibe a imagem no navegador
eco "";
?>

A imagem gerada dos dados da imagem aparecerá após a execução do script acima do servidor local.

Conclusão:

O objetivo de usar tipos de dados binários e diferentes usos de dados binários no PostgreSQL foi mostrado neste tutorial que ajudará o novo usuário do PostgreSQL a trabalhar com o tipo de dados binário.