Re: [pgAdmin] RM6018 Encoding issue updating database

From: Akshay Joshi <akshay(dot)joshi(at)enterprisedb(dot)com>
To: Khushboo Vashi <khushboo(dot)vashi(at)enterprisedb(dot)com>
Cc: pgadmin-hackers <pgadmin-hackers(at)postgresql(dot)org>
Subject: Re: [pgAdmin] RM6018 Encoding issue updating database
Date: 2021-02-18 06:16:07
Message-ID: CANxoLDdBwYv6kCBd9XumaeLd2beqZxy6tPeDop7fz8yhdp0o3g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-hackers

Hi Khushboo

Can you please review this patch?

On Wed, Feb 17, 2021 at 2:10 PM Rahul Shirsat <
rahul(dot)shirsat(at)enterprisedb(dot)com> wrote:

> Hi Team,
>
> This is regarding RM6018 <https://redmine.postgresql.org/issues/6018>
> when a user sets the database encoding to SQL_ASCII and names the column
> with ascii characters.
>
> [image: image.png]
>
> Code is written for escaping the ascii characters and getting its escaped
> value (here for È its encoding escaped value is \\xc8)
>
> I am trying to update È column for the second row. After encoding &
> decoding the column name generated so is \\xc8
>
> The actual issue is the dictionary key as a parameter passed for query
> execution.
>
> params = { '\\xc8' : 'some_value' }
>
> query = b'UPDATE public."\xfc" SET "\xc8" = %(\xc8)s WHERE "\xfc" =
> \'xyz\''
>
> query = query.encode(self.python_encoding)
>
> params = self.escape_params_sqlascii(params)
>
> cur.execute(query, params)
>
> As the cur.execute is unable to replace params in the query, it throws an
> error.
>
> The tried solutions are:
>
> 1. Tried to have \xc8 as a key, but python internally read it as È, so
> fails.
> 2. Tried placing the key as byte b'\xc8', doesn't work.
> 3. Tried to change the \xc8 to \\xc8 inside the query, but risk
> involves query tampering.
> 4. Tried including BYTES / BYTESARRAY typecasters according to psycopg
> docs https://www.psycopg.org/docs/usage.html#unicode-handling, still
> didn't work.
>
> Examples given in psycopg docs for Unicode handling involve only record
> values passed & not the column names itself.
>
> Any other suggestions on how we can handle this?
>
> --
> *Rahul Shirsat*
> Senior Software Engineer | EnterpriseDB Corporation.
>

--
*Thanks & Regards*
*Akshay Joshi*
*pgAdmin Hacker | Principal Software Architect*
*EDB Postgres <http://edbpostgres.com>*

*Mobile: +91 976-788-8246*

In response to

Responses

Browse pgadmin-hackers by date

  From Date Subject
Next Message Akshay Joshi 2021-02-18 08:53:48 pgAdmin 4 commit: Fixed ERDTables API test case.
Previous Message Dave Page 2021-02-17 15:43:05 pgAdmin 4 commit: The source location for cacert.pem has changed.