Tipo de datos binarios de PostgreSQL

Tipo de datos binarios de PostgreSQL
El tipo de datos binarios es otro tipo de datos útil de PostgreSQL para almacenar datos de cadenas binarias. La secuencia de bytes u octetos se almacena en la cadena binaria. El octeto de valor cero y los octetos no imprimibles se pueden almacenar en el campo del tipo de datos binarios. Los bytes crudos están almacenados por las cuerdas binarias. El valor de entrada de la cadena binaria puede ser tomada por el 'hex' o 'escapar' formato y el formato de la salida depende del parámetro de configuración, bytea_output. El formato de salida predeterminado es 'maleficio'. El blob o el objeto grande binario se define por el estándar SQL como el tipo de cadena binaria. En este tutorial se han mostrado diferentes formatos y los usos de los tipos de datos binarios en PostgreSQL.

Requisitos previos:

Debe instalar la última versión de los paquetes PostgreSQL en el sistema operativo Linux antes de ejecutar las declaraciones SQL que se muestran en este tutorial. Ejecute los siguientes comandos para instalar e iniciar el PostgreSQL:

1
2
3
$ sudo apt-get -y instalación postgresql postgresql-contrib
$ sudo systemctl iniciar postgresql.servicio

Ejecute el siguiente comando para iniciar sesión en PostgreSQL con permiso raíz:

1
$ sudo -u postgres psql

Bytea Hex Formato:

Los datos binarios están codificados como dos dígitos hexadecimales por byte en maleficio formato. La cadena binaria está precedida por la secuencia, \ x. Los dígitos hexadecimales pueden ser mayúsculas o minúsculas. Este formato es compatible con una amplia gama de aplicaciones externas.

Ejemplo:

1
# Seleccione E '\\ XABC0110' como hex_format;

Formato de escape de bytea:

El escapar El formato es el formato tradicional PostgreSQL. Se utiliza una secuencia de caracteres ASCII para representar los datos binarios en formato de escape. La cadena binaria se convierte en un valor octal de tres dígitos precedido por dos barras de retroceso.

Octetos escapares literal de Bytea:

Valor decimal Descripción Entrada escapada Ejemplo Producción
0 Octeto cero E '\\ 000' Seleccione E '\\ 000' :: bytea; \ x00
45 Guión '-' o e '\\ 055' Seleccione E '\-' :: bytea; \ x2d
110 'norte' 'N' o E '\\ 156' Seleccione E '\ n' :: bytea; \ x6e
0 a 31 y 127 a 255 Octetos no imprimibles E '\\ xxx' (valor octal) Seleccione E '\\ 001' :: bytea; \ x01

Octets de salida de salida de bytea:

Valor decimal Descripción Salida escapada Ejemplo Producción
45 Guión - Seleccione E '\\ 055' :: bytea; -
32 a 126 Octetos imprimibles Cualquier carácter imprimible Seleccione E '\\ 156' :: bytea; norte
0 a 31 y 127 a 255 Octetos no imprimibles \ xxx (valor octal) Seleccione E '\\ 001' :: bytea; \ 001

Uso del tipo de datos binarios en PostgreSQL:

Antes de crear cualquier tabla con el tipo de datos booleanos, debe crear una base de datos PostgreSQL. Entonces, ejecute el siguiente comando para crear una base de datos llamada 'testdb':

1
# Crear base de datos TestDB;

La siguiente salida aparecerá después de crear la base de datos:

Ejemplo-1: cree una tabla con un tipo de datos binarios para almacenar el valor octal

Crear una tabla llamada 'tbl_binary_1'En la base de datos actual con dos campos. El primer nombre de campo es identificación cuál es la clave principal de la tabla. El valor de este campo se incrementará automáticamente cuando un nuevo registro se insertará. El segundo nombre de campo es datos binarios y el tipo de datos es Bytea.

1
2
3
4
# Crear tabla tbl_binary_1 (
ID Clave primaria en serie,
binary_data bytea);

La siguiente salida aparecerá después de ejecutar la consulta anterior:

Ejecute la siguiente consulta de inserción que insertará dos valores octales en el tbl_binary_1 mesa:

1
2
3
4
5
# Insertar en tbl_binary_1 (binary_data)
VALORES
(E '\\ 055'),
(E '\\ 156');

La siguiente salida aparecerá después de ejecutar la consulta anterior:

Ejecute la siguiente consulta de selección que leerá todos los registros del tbl_binary_1 mesa:

1
# Seleccionar * de tbl_binary_1;

La siguiente salida aparecerá después de ejecutar la consulta anterior. La salida muestra el valor hexadecimal del valor octal.

Ejemplo-2: cree una tabla con un tipo de datos binarios para almacenar datos de imagen

Crear una tabla llamada 'tbl_binary_2'En la base de datos actual con tres campos. El primer nombre de campo es identificación cuál es la clave principal de la tabla y el valor de este campo se incrementará automáticamente cuando se insertará un nuevo registro. El segundo nombre de campo es Nombre de la imágen y el tipo de datos es Varchar (20). El nombre de la imagen se almacenará en este campo. El tercer nombre de campo es datos de imagen y el tipo de datos de este campo es Bytea. Los datos de la imagen se almacenarán en este campo.

1
2
3
4
5
# Crear tabla tbl_binary_2 (
ID Clave primaria en serie,
image_name varchar (20),
image_data bytea);

La siguiente salida aparecerá después de ejecutar la consulta anterior.

Inserte una imagen en la tabla usando PHP:

Crear un archivo PHP llamado insertar imagen.php con el siguiente código que leerá el contenido de un archivo de imagen. Luego, almacene la imagen en la tabla PostgreSQL después de convertirla en datos binarios.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dieciséis
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
// Mostrar configuración de error
ini_set ('display_errors', 1);
error_reporting (e_all);
$ host = "localhost";
$ user = "Postgres";
$ pass = "12345";
$ db = "testdb";
// Crear objeto de conexión de base de datos
$ db_connection = pg_connect ("host = $ host dbname = $ db user = $ user Password = $ pass")
o morir ("no se pudo conectar al servidor \ n");
$ filename = "flor.png ";
$ image = fopen ($ filename, 'r') o morir ("no se puede abrir el archivo.");
$ data = fread ($ image, filesize ($ filename));
$ CDATA = PG_ESCAPE_BYTEA ($ data);
fcLose ($ imagen);
// inserta los datos de la imagen
$ query = "Insertar en tbl_binary_2 (image_name, image_data) valores ('$ filename', '$ cdata')";
$ result = PG_Query ($ db_connection, $ QUERY);
if ($ resultado) echo "Los datos de la imagen se insertan correctamente.";
pg_close ($ db_connection);
?>

La siguiente salida aparecerá después de ejecutar el script anterior desde el servidor local y el archivo de imagen existente en la ubicación actual:

Lea los datos de la imagen de la tabla usando PHP:

Crear un archivo PHP llamado obtener la imagen.php con el siguiente código que leerá los datos binarios de un archivo de imagen. Cree la imagen a partir de los datos binarios y muestre la imagen en el navegador.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dieciséis
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
// Mostrar configuración de error
ini_set ('display_errors', 1);
error_reporting (e_all);
$ host = "localhost";
$ user = "Postgres";
$ pass = "12345";
$ db = "testdb";
// Crear objeto de conexión de base de datos
$ db_connection = pg_connect ("host = $ host dbname = $ db user = $ user Password = $ pass")
o morir ("no se pudo conectar al servidor \ n");
// Lea los datos de la imagen de la tabla
$ query = "seleccione Image_Data de tbl_binary_2 donde id = 1";
$ result = PG_Query ($ db_connection, $ QUIERY) o DIE (PG_LAST_ERROR ($ db_connection));
$ data = pg_fetch_result ($ resultado, 'image_data');
$ CIMAGE = PG_UNESCAPE_BYTEA ($ data);
// Crear un archivo de imagen con los datos de imagen recuperados de la tabla
$ filename = "myfile.jpg ";
$ image = fopen ($ nombre de archivo, 'wb') o morir ("no se puede abrir la imagen.");
FWrite ($ Image, $ CIMAGE) o Die ("No se puede escribir datos.");
fcLose ($ imagen);
pg_close ($ db_connection);
// Muestra la imagen en el navegador
eco "";
?>

La imagen generada a partir de los datos de la imagen aparecerá después de ejecutar el script anterior desde el servidor local.

Conclusión:

En este tutorial se ha mostrado el propósito de utilizar los tipos de datos binarios y los diferentes usos de los datos binarios en PostgreSQL que ayudará al nuevo usuario de PostgreSQL a trabajar con el tipo de datos binarios.