Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

220
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda