ODBC cliens is hanging if network connection is broken - Mailing list pgsql-odbc

From AYahorau@ibagroup.eu
Subject ODBC cliens is hanging if network connection is broken
Date
Msg-id OF33DF00A3.D6444835-ON432582C3.003EA7C5-432582C3.0045562B@iba.by
Whole thread Raw
Responses Re: ODBC cliens is hanging if network connection is broken  ("Inoue, Hiroshi" <h-inoue@dream.email.ne.jp>)
List pgsql-odbc
Hello PostgreSQL Community!

I downloaded and installed the latest version of PostgreSQL from
https://www.postgresql.org/ftp/source/v10.4/ on my SLES 12 system.
Here is my configuration of unixODBC:


odbcinst,ini
[PostgreSQL]
Description=PostgreSQL ODBC driver
Driver=/usr/local/lib/psqlodbcw.so
FileUsage=1

odbc.ini
[sles12-1]
Description = PostgreSQL connection to rtpdb
Driver = PostgreSQL
Database = rtpdb
Servername = sles12-1
Username =
Password =
Port = 5432
Protocol = 7.4+
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ConnSettings =

As a Driver in odbcinst.ini I specified the path to psqlodbcw.so which was downloaded from https://git.postgresql.org/gitweb/?p=psqlodbc.git and built as follows:
./configure
make
make install


Could you please provide a comment concerning the following situation?

I  created a simple ODBC program which calls "SELECT pg_is_in_recovery()" on the remote PostgreSQL server using ODBC API. It works good with this ODBC configuration. But as soon as I turn off network interface after SQLConnect  call and before SQLExecDirect, it leads to SQLExecDirect hanging.

I tried to use statement_timeout
 and idle_in_transaction_session_timeout  postgresql configuration parameters but they were not suitable for network issue case. These parameters define server-side behaviour but a client considers that the connection is ok and it is hanging.

As far as I know SQL_ATTR_CONNECTION_TIMEOUT ODBC attribute could handle this situation. Another ODBC driver for another database in case of similar situation returns HYT01  ODBC error (Connection timeout expired) . But I guess  SQL_ATTR_CONNECTION_TIMEOUT  is not supported by psqlodbc.  Am I right?

PostgreSQL JDBC driver provides
socketTimeout property which helps a client to be informed about network problems and to avoid an infinite hanging.
In my tests it returned 08006 sqlstate (connection_failure ).

So I have a question. Is there any psqlodbc or native PostgreSQL mechanism or configuration parameter which helps a client to be informed about network problem?
Is there any mechanism which helps to avoid this infinite hanging for SQL query in this case?


Thank You in advance,
Andrei Yahorau

pgsql-odbc by date:

Previous
From: Marcin Krawczyk
Date:
Subject: Windows 10 password problem
Next
From: "Inoue, Hiroshi"
Date:
Subject: Re: ODBC cliens is hanging if network connection is broken