Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
2 / 1 / 1
Регистрация: 11.06.2022
Сообщений: 121
PostgreSQL

Несколько одновременно открытых запросов в одном соединении к PostgreSQL

07.06.2023, 17:56. Показов 2988. Ответов 10

Студворк — интернет-сервис помощи студентам
Доброго времени,

такая проблема , открыт один NpgsqlDataReader, когда открываю следующий в этом же
соединении - то ругается : Npgsql.NpgsqlOperationInProgressExceptio n: "A command is already in progress:
и указывает на запрос предыдущего открытого NpgsqlDataReader.

Подскажите , есть ли настройки, чтобы можно было одновременно открывать несколько запросов?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.06.2023, 17:56
Ответы с готовыми решениями:

Добавление данных в Postgresql, Несколько запросов в одном событии
Здравствуйте! Подскажите пожалуйста в чем может быть беда ? Первый запрос выполняется, вытаскивает нужный SELECT MAX , далее ...

Выполнение одновременно несколько sql запросов одновременно
Здравствуйте. Есть проблема! Пролистал много сайтов и форумов и толком ничего не нашел. Суть проблемы указана в заголовке но все равно...

Как одновременно сохранить несколько открытых документов?
Добрый день! Столкнулась с такой проблемой: при закрытии на рабочем столе порядка 20 документов с помощью Excel 2010 сообщение...

10
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
07.06.2023, 21:38
Леонид_М, нужно закрыть первый NpgsqlDataReader перед открытием второго. Самое правильное через блок using.
0
2 / 1 / 1
Регистрация: 11.06.2022
Сообщений: 121
08.06.2023, 09:27  [ТС]
OwenGlendower,

это я знаю, что можно закрыть... У меня вопрос: как сделать, чтобы открыть несколько запросов одновременно в одной сессии?
Возможно ли такое в Postgresql?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
08.06.2023, 09:43
Леонид_М, похоже такой режим не поддерживается. Нашел issue на GitHub созданное еще в 2015 году - Implement MARS (Multiple Active Result Set). Там предлагается открывать новое соединение или использовать курсоры (что может быть медленным).
0
2 / 1 / 1
Регистрация: 11.06.2022
Сообщений: 121
08.06.2023, 10:07  [ТС]
OwenGlendower,

так с 2015-го могло все измениться... Я ничего толкового по этому вопросу не нашел,
кроме как одного упоминания ,что чтобы открыть новый запрос нужно закрыть старый.
Но опять же - это было не за последний год, а лет 12 назад вот это:

Я думаю, ты не сможешь. Одно соединение может одновременно обрабатывать один запрос.
Это описано в главе «Асинхронная обработка команд» документации libpq:
«После успешного вызова PQsendQuery вызовите PQgetResult один или несколько
раз для получения результатов. PQsendQuery не может быть вызван снова (в том же соединении),
пока PQgetResult не вернет нулевой указатель, указывающий, что команда выполнена».

Странно, что эта тема не обсуждалась...
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
08.06.2023, 10:16
Леонид_М, про 2015 я упомянул только чтобы показать что идея давно была предложена. В issue шло довольно активное обсуждение, которое стоит прочитать, раз вас интересует данная тема. Плюс там есть ссылки на другие issue. Их тоже не помешает проглядеть. В рамках уже упомянутого issue #462 вот самый важный комментарий от ведущего разработчика на проекте:
Here are some notes on MARS and why I'm not sure it belongs in Npgsql. tl;dr unlike SQL Server, PostgreSQL simply doesn't have a mechanism that would allow an efficient MARS implementation.

One aspect of MARS is to make it easier for users to write ADO.NET code: users can execute multiple commands without caring or tracking if the connection is already in use. This is purely a convenience thing - it's always possible to rewrite code so that it either (a) uses separate connections, (b) buffers the entire resultset before execute another command, or (c) uses PostgreSQL cursors and explicitly fetching results for the different commands.

Beyond convenience, another aspect of MARS is performance. To the best of my understanding, when using MARS on SQL Server, the multiple resultsets are streamed back from the server without any additional roundtrips being made by the client, as is required when using PostgreSQL cursors (e.g. FETCH NEXT). Considering the perf importance of roundtrips, this difference is really essential - an application doing MARS on SQL Server isn't doing any additional roundtrips, whereas a cursor-based MARS against PostgreSQL would be adding a lot of roundtrips. However, if users do want this behavior on Npgsql, they can use cursors themselves and accept the extra roundtrips.

The same is true if MARS is implemented by buffering the entire resultset - users can do it themselves if they wish, but that has a potentially large cost in terms of memory usage.

To summarize, given that PostgreSQL itself doesn't have an efficient MARS implementation (AFAIK), it doesn't seem right for Npgsql to implicitly do MARS under the hood, with considerable perf costs that would be implicit - unsuspecting users would be falling into a perf pit of failure.
0
Эксперт .NET
 Аватар для Usaga
14088 / 9306 / 1348
Регистрация: 21.01.2016
Сообщений: 34,956
08.06.2023, 12:40
Леонид_М, можешь в двух словах объяснить зачем такое понадобилось?
0
2 / 1 / 1
Регистрация: 11.06.2022
Сообщений: 121
08.06.2023, 13:51  [ТС]
Usaga

есть проект на mssql, там такое встречается, мне его нужно переделать на PostgreSQL.

OwenGlendower,

нашел пару предложений как должно работать - в строку коннекта добавить MultipleActiveResultSets = true или
preload reader=true - но не помогло ,пишет ,что неизвестные параметры...
0
Эксперт .NET
 Аватар для Usaga
14088 / 9306 / 1348
Регистрация: 21.01.2016
Сообщений: 34,956
08.06.2023, 14:00
Цитата Сообщение от Леонид_М Посмотреть сообщение
MultipleActiveResultSets = true
Такое понимает только MS SQL. Так зачем такое понадобилось?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
08.06.2023, 14:01
Цитата Сообщение от Леонид_М Посмотреть сообщение
в строку коннекта добавить MultipleActiveResultSets = true
Это работает только для SQL Server.

Цитата Сообщение от Леонид_М Посмотреть сообщение
preload reader=true
Этот параметр убрали в версии 3.0 - Npgsql 3.0 Release Notes. Там же дана ссылка на issue 462 с комментарием "We plan on working on MARS support". Очевидно эти планы все еще не воплощены в жизнь.

Цитата Сообщение от Леонид_М Посмотреть сообщение
есть проект на mssql, там такое встречается, мне его нужно переделать на PostgreSQL.
Видимо придется переписывать без использования MARS.
1
2 / 1 / 1
Регистрация: 11.06.2022
Сообщений: 121
08.06.2023, 15:05  [ТС]
OwenGlendower

Видимо придется переписывать без использования MARS. - Да... печалька!...

Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.06.2023, 15:05
Помогаю со студенческими работами здесь

MS Excel 2013 - несколько открытых файлов в одном окне
В MS Excel 2010 при открытии нескольких документов они открывались в одном окне на вкладках, в 2013 этого уже не вижу, все открывается в...

MySqlConnection, несколько запросов одновременно
В общем написал вот такой класс для сервера, заметил что если не освободить ресурсы то MySqlConnection выдаёт ошибку, поэтому возник...

Несколько запросов в одном
Как можно добавить в одну таблицу строку и сразу же обновить строку в другой таблице, передав второй таблице id только что созданной строки...

Несколько запросов в одном
Можно ли сделать несколько запросов в одном? Например вот есть 2 таблицы и более с одинаковыми полями, некоторые из них повторяются и...

Как запустить несколько AJAX запросов одновременно
В общем есть массив arLatLong с координатами GPS, размер массива первоначально не определён, может быть 5 элементов а может быть и 100. В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru