Я хотел заблокировать таблицу из одного приложения и вставить некоторые данные.И мое требование заключается в том, что если эта таблица уже заблокирована каким-либо другим процессом, то мне нужно попытаться заблокировать ее через определенное время.
Я использую драйвер unixODBC на машине CentOS, и моя база данных - postgresql.Я провел исследование о том, как выполнить SQL асинхронно с помощью API ODBC.Я обнаружил, что SQLSetStmtAttr API можно использовать для асинхронного выполнения оператора SQL.Но это не работает.
Вот как я написал код:
ret = SQLSetStmtAttr( stmt1, SQL_ATTR_ASYNC_ENABLE,(SQLPOINTER) SQL_ASYNC_ENABLE_ON, 0);
// above statement returned success
if((ret = SQLExecDirect(stmt1,"lock table test",SQL_NTS)) == SQL_STILL_EXECUTING)
{
printf("\nCanceling\n");
ret = SQLCancel(stmt);
}
// Но процесс зависает на API SQLExecDirect, так как эта таблица "test" уже заблокирована другимпроцесс.(Зависание в том смысле, что все другие процессы снимают блокировку)
Почему так?Это потому, что мой драйвер unixODBC не поддерживает асинхронное выполнение.если так, то почему SQLSetStmtAttr возвращает успех?
Любая помощь очень ценится.Заранее спасибо.