BUG #14739: Wrong message when unique contraint fail
The following bug has been logged on the website:
Bug reference: 14739
Logged by: Fred BARROUD
Email address: fbd@datasapiens.com
PostgreSQL version: 9.6.1
Operating system: Windows 10
Description:
I there,
I am testing PG on this query :
CREATE TABLE T_UNIK (ID INT UNIQUE);
INSERT INTO T_UNIK VALUES (1), (2), (3), (4), (5);
UPDATE T_UNIK SET ID = ID + 1;
I know that PG is unable to do this set based operation properly because it
does it row by row (which is a nonsense since it works on many RDBMS)
But the error message is strongly stupid :
ERROR: invalid byte sequence for encoding "UTF8": 0xe9 0x71 0x75
I am doing this through PG Admin 4 (v 1.1)
Thanks in advance
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs
On Mon, Jul 10, 2017 at 6:16 AM, <fbd@datasapiens.com> wrote:
The following bug has been logged on the website:
Bug reference: 14739
Logged by: Fred BARROUD
Email address: fbd@datasapiens.com
PostgreSQL version: 9.6.1
Operating system: Windows 10
Description:[...]
UPDATE T_UNIK SET ID = ID + 1;
I know that PG is unable to do this set based operation properly because it
does it row by row (which is a nonsense since it works on many RDBMS)
If you setup deferred constraints and execute in a matching transaction
mode the above will work just fine. For performance reasons it just
doesn't work by default.
But the error message is strongly stupid :
ERROR: invalid byte sequence for encoding "UTF8": 0xe9 0x71 0x75I am doing this through PG Admin 4 (v 1.1)
Performing that in psql on 9.6.3 provokes the expected error message so
either its a 9.6.1 problem (doubtful) and you should upgrade or its a
pgAdmin 4 problem (not that doubtful unfortunately) and you should report
it on their mailing lists. This list is intended for bugs in the server
and the psql client. pgAdmin is a third-party project.
David J.
fbd@datasapiens.com writes:
I am testing PG on this query :
CREATE TABLE T_UNIK (ID INT UNIQUE);
INSERT INTO T_UNIK VALUES (1), (2), (3), (4), (5);
UPDATE T_UNIK SET ID = ID + 1;
I know that PG is unable to do this set based operation properly because it
does it row by row (which is a nonsense since it works on many RDBMS)
The solution for that is documented: declare the unique constraint as
deferrable.
regression=# CREATE TABLE T_UNIK (ID INT UNIQUE deferrable );
CREATE TABLE
regression=# INSERT INTO T_UNIK VALUES (1), (2), (3), (4), (5);
INSERT 0 5
regression=# UPDATE T_UNIK SET ID = ID + 1;
UPDATE 5
But the error message is strongly stupid :
ERROR: invalid byte sequence for encoding "UTF8": 0xe9 0x71 0x75
I don't get that here. It looks like you must be typing some non-ASCII
characters and not everything is on the same page about what encoding
they are in.
regards, tom lane
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs