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

815
Vistas
COPIA de Postgres en el campo hstore con comillas dobles en valor

He intentado durante horas llenar una base de datos de Postgres 12 desde un archivo CSV usando el comando COPY . La tabla en cuestión tiene un campo hstore y uno de los pares clave-valor tiene una comilla doble " en el valor.

La base de datos de Postgres se crea así.

 CREATE TABLE test ( title VARCHAR(20), tags hstore );

El archivo CSV usa tabs como delimitadores y se ve así

 My Title | name=>"""Paul "Butch" Newman""", job=>actor

El valor del nombre debe estar entre comillas dobles y escapar porque contiene espacios.

| representa un carácter de tabulación.

Mi declaración de importación se ve así:

 COPY test (title, tags) FROM '/var/lib/postgresql/data/test.csv' DELIMITER E'\t' CSV ENCODING 'UTF8';

La base de datos se llena como se esperaba, pero cuando la consulto con

SELECT tags->'name' as name FROM test;

pgAdmin 4 regresa

Paul Butch Newman

en vez de

Paul "Butch" Newman

Mi pregunta es ¿cómo obtener las comillas dobles en el valor real de hstore?

Encontré muchas respuestas sobre comillas dobles para la importación en campos de texto. Pero aquí la importación está en un campo hstore y el valor debe estar entre comillas dobles aquí, ya que contiene espacios.

¡Gracias!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Acabo de jugar con esto localmente.

Supongo que tiene control sobre el formato de su archivo de entrada.

El problema es que el formato CSV convierte "" que se encuentra dentro de los elementos encerrados entre comillas dobles a " al pasarlos.

Esto funcionó para mí para obtener el resultado que desea:

 My Title | name=>"""Paul \""Butch\"" Newman""", job=>actor

Una vez que el controlador de CSV termina con su escape al convertir las comillas dobles dobles en comillas simples, pasa name=>"Paul \"Butch\" Newman", job=>actor al insert , que es como lo escribiría como un literal en psql o PgAdmin.

 select tags->'name' as name from test_hstor; name --------------------- Paul "Butch" Newman (1 row)

Por curiosidad, verifiqué importarlo como texto en lugar de csv, y el registro de entrada debe contener name=>"Paul \\"Butch\\" Newman", job=>actor para que funcione correctamente.

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