Escape Python to `json[]` for `COPY FROM` PostgreSQL insertion?

From: Samuel Marks <samuelmarks(at)gmail(dot)com>
To: psycopg(at)lists(dot)postgresql(dot)org
Subject: Escape Python to `json[]` for `COPY FROM` PostgreSQL insertion?
Date: 2023-02-21 04:34:19
Message-ID: CAMfPbcbOoC0k2CoSDo1jR-nh98N5qs_aU1T9hEXYpMfpQb-bZA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: psycopg

How do I insert into a table with a `json[]` column using the `COPY FROM`
syntax?

Attempt:
https://gist.github.com/SamuelMarks/fec744a620e2abd0257671aa6f2a96b4

Error:
psycopg2.errors.InvalidTextRepresentation: malformed array literal:
"{"jj":null,"text":"bop"}"

Or when I try to json.dump the dict twice I get:
psycopg2.errors.InvalidTextRepresentation: malformed array literal:
""{"jj":null,"text":"bop"}"" DETAIL: Array value must start with "{" or
dimension information. CONTEXT: COPY my_table, line 1, column
json_arr_col: ""{"jj":null,"text":"bop"}""

I'm using your `copy_expert` function. PS: Also asked on
https://stackoverflow.com/q/75511919

Am I meant to represent the lists with braces rather than square brackets?
- Or should I be using some internal psycopg function as opposed to my
hacked together `parse_col` function?

Thanks,

Samuel Marks
Charity <https://sydneyscientific.org> | consultancy <https://offscale.io>
| open-source <https://github.com/offscale> | LinkedIn
<https://linkedin.com/in/samuelmarks>

Responses

Browse psycopg by date

  From Date Subject
Next Message Adrian Klaver 2023-02-21 05:18:54 Re: Escape Python to `json[]` for `COPY FROM` PostgreSQL insertion?
Previous Message Daniele Varrazzo 2022-12-23 02:58:21 Re: bug in handling Postgres bytea type?