Ls+odbc в postgres - один и тот же запрос выдает разные данные

  • Автор темы anna
  • Дата начала
A

anna

Добрый день, коллеги!
Есть некий скрипт, работает уже дцать лет, а тут внезапно стал работать нестабильно - на один и тот же SQL запрос то вернет правильное значение из базы, то вдруг ничего на найдет, потом снова найдет итп. При этом в самой Postgres базе ничего не меняется.
Какова может быть природа у такой странности?
запрос простой, типа select a."nob-kod" from PUB.k_ktnob a where (a."nob-dat-p"<=NOW()) AND(a."nob-dat-k">=NOW()) AND (a."nr-prac" = }+TabNum +{)}
Админ Postgres прислал скриншот, что у него на такой запрос выдается все красиво. А у меня - то пусто, то правильно, то пусто, то правильно.
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
513
1. NOW() - возвращает время с секундами
2. Проверяйте поля a."nob-dat-k" и a."nob-dat-p" в базе, что там содержится, можно даже таблицу выгрузить глянуть.
 
A

anna

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 982
611
BIT
447
а что за либа, кот. парсит ответ от слона?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 982
611
BIT
447
или вовсе отказаться от ОДБЦ ;)
 
A

anna

2) в LS укажи явно какой режиме работы ODBC
Что значит режим работы? Где это?
[DOUBLEPOST=1426678734,1426678561][/DOUBLEPOST]
или вовсе отказаться от ОДБЦ ;)
Ну, систему в течение года вообще поменяем, поэтому переходить сейчас на что-то другое нет смысла.
И, все же, должна же быть причина у такого странного поведения!
 
Последнее редактирование:

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 982
611
BIT
447
И, все же, должна же быть причина у такого странного поведения!
ну вы же не описали - что поменялось ;)
апдейты на систему, апдейты на ОДБЦ, дривер устарел...
можно оттрейсить ответы от сервака, по сети (у ОДБЦ тоже есть режим )
 
A

anna

Драйвер не устарел - новую версию базы не накатывали.
апдейты на систему - не накатывались, да и если были, то лотусу-то что?
Трейсить - попробуем, правда, не знаю, что даст. Вижу, что через раз правильно отдает, а с какого перепугу - неясно.
 

rinsk

Lotus Team
12.11.2009
1 155
126
BIT
38
Эзернет кабель поменяйте да и вообще - сеть проверьте. Там такие чудеса бывают...
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
513
Вижу, что через раз правильно отдает, а с какого перепугу - неясно.
Можете передать вместо NOW-sql значение now из лотуса?
Чтобы передать и проверить работу со статичным значением.
 
A

anna

Эзернет кабель поменяйте да и вообще - сеть проверьте. Там такие чудеса бывают...
:cool: тогда бы разброс был по разным вызовам и ошибки были бы разными.... Вначале-то проверка коннекта делается, и этот запрос в агенте отнюдь не первый, остальные-то отрабатывают
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 982
611
BIT
447
апдейты на систему - не накатывались, да и если были, то лотусу-то что?
домине - ничего ;), а вот ОДБЦ вполне себе заглючит
[DOUBLEPOST=1426687199,1426687121][/DOUBLEPOST]
:cool: тогда бы разброс был по разным вызовам и ошибки были бы разными....
это от работы стека зависит (TCP повторы делает, при ошибках)
[DOUBLEPOST=1426687319][/DOUBLEPOST] людя бились
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Что значит режим работы? Где это?
ты в LS как к ODBC обращаешься?

Set ODCConn = New ODBCConnection
ODCConn.SilentMode = True

Set SQLQuery = New ODBCQuery
Set SQLQuery.Connection = ODCConn
SQLQuery.SQL = SQLCommand
Set ResultSet = New ODBCResultSet
Set ResultSet.Query = SQLQuery
ResultSet.CacheLimit = DB_NONE

Есть что нибудь подобное? ;)
 
A

anna

Вместо DB_NONE стоит DB_ALL
это что значит?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 982
611
BIT
447
Свойство CacheLimit
Чтение: limit% = odbcResultSet.CacheLimitУстановка: odbcResultSet.CacheLimit = limit%
Максимальное количество записей (тип Integer), кэшируемых в памяти. Помимо числового значения качестве limit% допустимы также константы DB_ALL (кэшируется весь таблиц результатов) или DB_NONE (минимум - только текущая запись находится в памяти). Если задано также значение свойства FetchBachSize, то оно должно быть меньше или равно значения CacheLimit.
Ограничение размера кэша способствует экономии памяти. Но когда размер кэша ограничен, "недавно" прочитанные из базы записи будут постепенно замещать "более старые" записи в кэше. Если записи, которые уже были прочитаны из базы и были замещены в кэше, потребовались скрипту снова, они будут заново считываться из базы данных.
а как это трактует @ToxaRat - это у него узнать надо :)
 
A

anna

Подключила хэндлер ошибок И в ранее нормально работавшем агенте вижу странное:
Код:
Ошибка 640, LS:DO- Row has been UnCached., LS:DO- Row has been UnCached. on line 2
 
Последнее редактирование:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!