почему доступ к 2010 с помощью драйвера postgresql odbc вызывает IDENT_CURRENT? - PullRequest
2 голосов
/ 05 апреля 2011

Я переношу приложение access 2003 на access 2010. Приложение использует драйвер odbc postgres для доступа к своим данным.

При доступе 2010 он пытается использовать функцию IDENT_CURRENT на сервере postgresql (как видно с wireshark), чтобы идентифицировать идентификатор недавно вставленной строки ... К сожалению, IDENT_CURRENT, насколько мне известно, не поддерживается функцией postgresql. ..

Я использую последнюю версию ODBC-драйвера postgresql (9.0) с базой данных postgresql 8.3.

1 Ответ

1 голос
/ 05 апреля 2011

Использование currval - правильный путь (выделение мое):

Возвращает значение, недавно полученное nextval для этой последовательности в текущем сеансе,(Сообщается об ошибке, если nextval никогда не вызывался для этой последовательности в этом сеансе.) Поскольку этот возвращает локальное значение сеанса, он дает предсказуемый ответ независимо от того, были ли выполнены другие сеансы nextval с момента проведения текущего сеанса.

И оборачивание его в функцию IDENT_CURRENT является вполне разумной техникой портирования.

Вы также можете использовать RETURNING id в ваших операторах INSERT (опять же, выделение мое):

Необязательное предложение RETURNING заставляет INSERT вычислять и возвращать значения, основанные на каждой фактически вставленной строке.Это в первую очередь полезно для получения значений, которые были предоставлены по умолчанию, таких как порядковый номер .

Это может быть немного быстрее и чище, но у вас все еще есть некоторыепроблемы переносимости.ОТО, я думаю, у вас будут проблемы с переносимостью, независимо от того, что вы делаете.

...