ODBC cliens is hanging if network connection is broken
[email protected] Sat, 7 Jul 2018 15:37:20 +0300
| Newsgroups | gmane.comp.db.postgresql.odbc |
|---|---|
| Message-ID | <[email protected]> |
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