Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

219
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!