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

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

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 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!