From 0169d42681ab699a05533a1e9294e98ab6494535 Mon Sep 17 00:00:00 2001 From: Alexey Kopytov Date: Tue, 14 Nov 2017 11:30:12 +0300 Subject: [PATCH] Fix #180: Add support for CockroachDB (PostgreSQL protocol) Add '40001' (serialization_failure) to the list of ignored SQL states in drv_pgsql.c. The error appears to be specific to CockroachDB, but restarting the current transaction is the only reasonable way to handle it. --- src/drivers/pgsql/drv_pgsql.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/drivers/pgsql/drv_pgsql.c b/src/drivers/pgsql/drv_pgsql.c index 03ffcf6..f7fceea 100644 --- a/src/drivers/pgsql/drv_pgsql.c +++ b/src/drivers/pgsql/drv_pgsql.c @@ -531,7 +531,8 @@ static db_error_t pgsql_check_status(db_conn_t *con, PGresult *pgres, con->sql_errmsg = strdup(PQresultErrorField(pgres, PG_DIAG_MESSAGE_PRIMARY)); if (!strcmp(con->sql_state, "40P01") /* deadlock_detected */ || - !strcmp(con->sql_state, "23505") /* unique violation */) + !strcmp(con->sql_state, "23505") /* unique violation */ || + !strcmp(con->sql_state, "40001"))/* serialization_failure */ { PGresult *tmp; tmp = PQexec(pgcon, "ROLLBACK");