Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

221
Vistas
Cómo obtener una cadena binaria comprimida de una fila postgres

Hola, tengo este código que produce un archivo txt con una cadena de compresión que se insertará en una base de datos de postgres

 def test_insert(): str_test = '4 1 2\n 2 4 5\n'.encode('utf8') cmpstr = zlib.compress(str_test) str_test_to_write = '\\x' + cmpstr.encode('hex_codec') with open('outfile.txt','w') as output_file: output_file.write(str(1) + '|'+ str_test_to_write + '\n') output_file.write(str(2) + '|'+ str_test_to_write + '\n')

Luego uso el comando copiar para cargar la información en mi tabla:

 time cat outfile.txt |psql teste3 -c "\copy zstr(id,zstr) from stdout with delimiter '|'"

Esta es mi tabla:

 drop table if exists zstr; create table zstr( id int, zstr bytea, primary key(id));

Luego quiero seleccionar mis cadenas pero recibo este error:

 >>> import psycopg2 >>> import zlib >>> con = psycopg2.connect(host = 'X', database = 'Y', user = 'Z') >>> con.autocommit = True >>> cur = con.cursor() >>> cur.execute('select * from zstr where id = 1') >>> row = cur.fetchone() >>> row (1, <read-only buffer for 0x7fe19b75f270, size 41, offset 0 at 0x7fe196976f30>) >>> a = str(row[1]) >>> q = zlib.decompress(a) Traceback (most recent call last): File "<stdin>", line 1, in <module> zlib.error: Error -3 while decompressing data: incorrect header check

Entonces, ¿cómo puedo obtener mis cuerdas?

La salida que quiero:

 '4 1 2\n 2 4 5\n'
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Casi no hay razón para hacer esto. PostgreSQL comprime naturalmente el texto, con LZ, si el valor es mayor que TOAST_TUPLE_THRESHOLD. De los documentos en TOAST

El código de gestión TOAST se activa solo cuando el valor de una fila que se va a almacenar en una tabla es más ancho que los bytes TOAST_TUPLE_THRESHOLD (normalmente 2 kB). El código TOAST comprimirá y/o moverá los valores de los campos fuera de línea hasta que el valor de la fila sea más corto que los bytes TOAST_TUPLE_TARGET (también normalmente 2 kB) o no se puedan obtener más ganancias. Durante una operación de ACTUALIZACIÓN, los valores de los campos sin modificar normalmente se conservan tal cual; por lo tanto, una ACTUALIZACIÓN de una fila con valores fuera de línea no incurre en costos TOAST si ninguno de los valores fuera de línea cambia.

Lo hace de forma transparente para el usuario. Simplemente almacene el texto en sí.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda