|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Добрый день, коллеги. Изучаю libpq c В этом я полнейший чайник :( Но есть желание. В теме будут вопросы, иногда совсем простые. Очень надеюсь на помощь Maxim Boguk, mefman и других светлых умов форума. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 17:52 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Вопрос №1 Как вывести результат PQresultStatus(res) на экран? Так выводит не статус, а : Код: sql 1.
Segmentation fault Кусок текста полностью, на котором останавливается: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Я подозреваю что тут вместо PGRES_COMMAND_OK выдает PGRES_TUPLES_OK Но хочется вывести что он выводит, подозреваю какое-то преобразование требуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 18:00 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
PGRES_COMMAND_OK выдает PGRES_TUPLES_OK так и было, но как вывести на экран текущую PQresultStatus так не разобрался пока. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 18:17 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Уткъ, Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 19:24 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
grgdvo Уткъ, Код: plaintext 1.
Большое спасибо! Код: sql 1.
Почитаю про разницу между printf и fprintf. Вопрос №1 снят. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 20:00 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Вопрос №2 Как взять один столбец таблицы на одном сервере и вставить эти данные в новую таблицу на другом? Я так понимаю что требуется PQputCopyData. Но как в нее вставить результат запроса с другого сервера? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 03:58 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Уткъ, Советую сначала представить задачу на SQL уровне, что вы хотите, а потому уже переложить на libpq. PG не колоночная СУБД, и просто так взять одну колонку и куда-то там ее вставить не получится. И PQputCopyData здесь точно не поможет (эта функция реализует SQL-команду COPY). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 10:36 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
grgdvo Уткъ, Советую сначала представить задачу на SQL уровне, что вы хотите, а потому уже переложить на libpq. PG не колоночная СУБД, и просто так взять одну колонку и куда-то там ее вставить не получится. И PQputCopyData здесь точно не поможет (эта функция реализует SQL-команду COPY). Да, я давно все представил требуется: Код: sql 1. 2.
Как это сделать? Я думал на PQputCopyData результат запроса как-то подавать. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 12:47 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
сразу говорю что сам длинк не подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 12:48 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Получаешь данные с одного сервера запросом SELECT, потом вставляешь их в другой запросом INSERT. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 14:38 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Получаешь данные с одного сервера запросом SELECT, потом вставляешь их в другой запросом INSERT. Зачем писать свой FDW если нет каких то КРАЙНЕ специфических требований - я не знаю. PS: FDW который множественные вставки через insert делает - для batch переносов пригоден крайне плохо потому что упирается не в скорость серверов и даже не в ширину канала а в network latency которая почти никак не поддаётся снижению обычно. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 17:27 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Maxim Boguk Dimitry Sibiryakov Получаешь данные с одного сервера запросом SELECT, потом вставляешь их в другой запросом INSERT. Зачем писать свой FDW если нет каких то КРАЙНЕ специфических требований - я не знаю. PS: FDW который множественные вставки через insert делает - для batch переносов пригоден крайне плохо потому что упирается не в скорость серверов и даже не в ширину канала а в network latency которая почти никак не поддаётся снижению обычно. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru да, инсерт тут не в тему как-то. copy (PQputCopyData) подходит больше в теории но как это сделать? я так понял что как-то надо на вход подать PQputCopyData результат SELECT с другого сервера. но примеров таких не нашел еще... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 18:49 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Уткъ, Надо определится, что конкретно Вы хотите. Вопрос №2 звучал как, хочу взять колонку таблицы с одного сервера и вставить ее в таблицу другого. Покажите источники данных... на пальцах, скринами... как-нибудь покажите. (Ответ при прямом прочтении вопроса - колонку данных вставить нельзя, можно вставить(изменить/удалить) список записей, состоящих из полей и как бы образующих колонки). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 19:47 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
grgdvo Уткъ, Надо определится, что конкретно Вы хотите. Вопрос №2 звучал как, хочу взять колонку таблицы с одного сервера и вставить ее в таблицу другого. Покажите источники данных... на пальцах, скринами... как-нибудь покажите. (Ответ при прямом прочтении вопроса - колонку данных вставить нельзя, можно вставить(изменить/удалить) список записей, состоящих из полей и как бы образующих колонки). яж писал: Код: sql 1. 2.
поясняю: взять результат SELECT field1 FROM table1 на одном сервере и вставить его в таблицу на другом сервере. вроде понятно цель описал. Как это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 20:36 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
grgdvo, вот картинка ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 20:52 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Ну или как-то PQgetCopyData с одного сервера в PQputCopyData перенаправить? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 22:45 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Уткъ, По-моему, Вы занимаетесь ерундой. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2022, 00:01 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
mefman Уткъ, По-моему, Вы занимаетесь ерундой. Возможно, однако надо сделать это. Вы можете подсказать как? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2022, 01:15 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Уткъ grgdvo, вот картинка Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2022, 10:53 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Уткъ, через дблинк обычным инсертом ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2022, 10:55 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Maxim Boguk FDW который множественные вставки через insert делает - для batch переносов пригоден крайне плохо потому что упирается не в скорость серверов и даже не в ширину канала а в network latency которая почти никак не поддаётся снижению обычно. Снижению да, но поддаётся маскированию за счёт буферизации fetch на одной стороне и Array DML/Bulk Insert/etc на другой в результате чего по сети идёт поток данных без ожидания ответа на каждую запись. PS: Чем, собственно, и занимаются PQgetCopyData/PQputCopyData если документация не врёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2022, 15:05 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Уткъ mefman Уткъ, По-моему, Вы занимаетесь ерундой. Возможно, однако надо сделать это. Вы можете подсказать как? Если делать в лоб без dblink и прочих плюшек, то примерно как-то так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2022, 22:41 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
grgdvo, а зачем так сложно? Открыли два коннекта, в одном сделали copy from в другом copy to и просто перекладываете построчно всё из первого во второй без всяких извращений вокруг форматирования insert'ов. Это если уж очень хочется на C делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2022, 10:30 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Melkij, авторЕсли делать в лоб без dblink и прочих плюшек, то примерно как-то так Это пусть уж ТС решает, как ему проще или сложнее. Захочет - спросит. Предела совершенства нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2022, 21:34 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Вопрос №2 Решен. В итоге получилось на основе примера от grgdvo : grgdvo Уткъ пропущено... Возможно, однако надо сделать это. Вы можете подсказать как? Если делать в лоб без dblink и прочих плюшек, то примерно как-то так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
Но с учетом сообщения от Melkij Melkij Открыли два коннекта, в одном сделали copy from в другом copy to и просто перекладываете построчно всё из первого во второй без всяких извращений вокруг форматирования insert'ов. Это если уж очень хочется на C делать. Большое спасибо, парни! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2022, 01:52 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Коллеги, добрый день. Вопрос №3 Под линукс все нормально скопилирвалось и работает. Под виндоус скомпилировалось, но при запуске: не удалось продолжить выполнение кода поскольку система не обнаружила LIBPQ.dll При попытке зарегистрировать библиотеку: Код: sql 1.
Ошибка: ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 15:08 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Подскажите пожалуйста что сделать чтобы скопилированное приложение пд Win запустилось? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 15:09 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Сам файл "C:\Program Files\PostgreSQL\11\lib\libpq.dll" существует. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 15:18 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
мож как-то связано х32 и х64 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 16:04 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Уткъ мож как-то связано х32 и х64 ? Не то чтобы вам никто не хочет отвечать но этот вопрос уже совсем оффтопик на этом форуме и просто специалистов нет. Я последний раз что то под винду 22 года назад собирал. Вам бы в сишный форум обратиться. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 19:00 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Maxim Boguk Уткъ мож как-то связано х32 и х64 ? Не то чтобы вам никто не хочет отвечать но этот вопрос уже совсем оффтопик на этом форуме и просто специалистов нет. Я последний раз что то под винду 22 года назад собирал. Вам бы в сишный форум обратиться. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru Да, понимаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 20:41 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Уткъ, Пропишите в системный PATH путь до C:\Program Files\PostgreSQL\11\lib, чтобы система смогла найти и саму DLL и зависимые библиотеки, которые в этой директории могут быть расположены. Раньше вроде установка под Windows стандартной сборки от EDB что-то прописывала, но может сбилось. Честно говоря Windows тоже постольку-поскольку использую и не помню точно. Но причина именно в этом. DLL и зависимые от нее не найдены. И не используйте regsvr32. Это вообще про другое и в данном случае никакая регистрация тут не поможет. libpq не поддерживает интерфейса регистрации, который ожидает regsvr32. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 21:17 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
grgdvo Уткъ, Пропишите в системный PATH путь до C:\Program Files\PostgreSQL\11\lib, чтобы система смогла найти и саму DLL и зависимые библиотеки, которые в этой директории могут быть расположены. Раньше вроде установка под Windows стандартной сборки от EDB что-то прописывала, но может сбилось. Честно говоря Windows тоже постольку-поскольку использую и не помню точно. Но причина именно в этом. DLL и зависимые от нее не найдены. И не используйте regsvr32. Это вообще про другое и в данном случае никакая регистрация тут не поможет. libpq не поддерживает интерфейса регистрации, который ожидает regsvr32. Большое спасибо! Помогло! ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 23:36 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Вопрос №3 решен Спасибо grgdvo ! ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 23:37 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Вопрос №4 Под windows не работает PQgetvalue. Вот простой код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36.
Под Linux он компилируется и отрабатывает нормально, вот такой результат: Connecting SQL Executing Trying to take resoult test_resoult OK Closing connection Под windows компилируется нормально, при попытке получить результат (PQgetvalue) падает с ошибкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 01:23 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
При этом Код: plaintext 1.
запрашиваю напрямую, без переменных для упрощения, с переменными так же под Linux работает, под win нет. Пробовал уже разные варианты: Код: plaintext 1. 2. 3.
результат тот же. Такое впечатление что PQgetvalue не работает под виндоус ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 01:26 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
При этом, если добавить: Код: plaintext 1. 2. 3.
То и под линуксом и под виндоус одинаково выводится: Код: sql 1. 2.
т.е. не отрабатывает именно PQgetvalue ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 01:52 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Вопрос №4 снят сраный касперский ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 02:06 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Уткъ mefman Уткъ, По-моему, Вы занимаетесь ерундой. Возможно, однако надо сделать это. Вы можете подсказать как? Если таблица в 2-3НФ то должны быть ключи. Задача больше похожа на merge чем insert. В реляционной алгебре вообще нет такой задачи как копировать столбец. Этож не Excel. Должна быть привязка к ключевым полям. Если это - инициализация пустой таблицы - то это надо как-то акцентировать. Например заранее очистить таблицу. И указать что мы insert-им ключевое поле. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 14:19 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
mayton Уткъ пропущено... Возможно, однако надо сделать это. Вы можете подсказать как? Если таблица в 2-3НФ то должны быть ключи. Задача больше похожа на merge чем insert. В реляционной алгебре вообще нет такой задачи как копировать столбец. Этож не Excel. Должна быть привязка к ключевым полям. Если это - инициализация пустой таблицы - то это надо как-то акцентировать. Например заранее очистить таблицу. И указать что мы insert-им ключевое поле. Да, так и есть. Просто INSERT INTO ... SELECT по сути. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 04:10 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Вопрос №5 Подскажите пожалуйста, PQputCopyData может работать с PQsendQuery? Или она только под PQexec расчитана? Суть задачи: выполнить (COPY TO STDOUT) -> (COPY FROM STDIN) в несколько потоков. Может быть она как-то по-другому решается. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 04:12 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
А чем вам для заявленной задачи поможет PQsendQuery? С copy from stdin в общем проще, открываете N коннектов, каждый из которых переводите в copy from stdin, fifo или round-robin'ом или ещё как жонглируете коннектами. А вот будет ли от этого толк - вопрос отдельных изысканий. Совсем не исключено, что это будет напротив контрпродуктивно относительно одного copy С copy to stdout - придумайте как нарезать чтение запроса на части, при том в таком виде, чтобы это было быстрее выполнять относительно одного потока copy. Затем разобрать как позаботиться о транзакционной целостности этих параллельных запросов либо обосновать отсутствие необходимости в этом условиями реальной задачи. А далее идея та же - открываете N коннектов, в каждом делаете copy (select ...) to stdout ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 10:56 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Melkij А чем вам для заявленной задачи поможет PQsendQuery? С copy from stdin в общем проще, открываете N коннектов, каждый из которых переводите в copy from stdin, fifo или round-robin'ом или ещё как жонглируете коннектами. А вот будет ли от этого толк - вопрос отдельных изысканий. Совсем не исключено, что это будет напротив контрпродуктивно относительно одного copy С copy to stdout - придумайте как нарезать чтение запроса на части, при том в таком виде, чтобы это было быстрее выполнять относительно одного потока copy. Затем разобрать как позаботиться о транзакционной целостности этих параллельных запросов либо обосновать отсутствие необходимости в этом условиями реальной задачи. А далее идея та же - открываете N коннектов, в каждом делаете copy (select ...) to stdout Я не четко сформулировал задачу: выполнить (COPY TO STDOUT) -> (COPY FROM STDIN) в несколько потоков с разных серверов. Т.е. на несколько разных серверов идут одинаковые (COPY TO STDOUT) и они парралельно должны записать данные на другой сервер в одно место. Т.е. грубо говоря, выполнить один запрос (COPY (SELECT id FROM my_table) TO STDOUT) парралельно на нескольких разных серверах, потратив на это меньше времени по сравнению с последовательным выполнением на каждом и записью результата (COPY my_table FROM STDIN) на один сервер. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 11:15 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Melkij, Хотел уточнить на всякий случай, PQputCopyData может работать с PQsendQuery? Вчера не получилось сделать, примеров не нашел ( ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 11:22 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Уткъ, ну открываете по коннекту на каждый сервер с которых надо читать, стартуете copy. На запись можно отправлять построчно даже через один copy from - но в этом случае commit или rollback, конечно, только всего объёма сразу возможен. Возможно логичнее будет открывать по независимому copy from stdin для каждого источника. Уткъ Хотел уточнить на всякий случай, PQputCopyData может работать с PQsendQuery? по-прежнему не понимаю зачем. Как однозначно указано в документации PQputCopyData, функция предусматривает режим работы в неблокирующем режиме. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 11:36 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Melkij Уткъ, Как однозначно указано в документации PQputCopyData, функция предусматривает режим работы в неблокирующем режиме. О. получается можно - отлично! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 11:37 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Melkij Уткъ, Уткъ Хотел уточнить на всякий случай, PQputCopyData может работать с PQsendQuery? по-прежнему не понимаю зачем. Ну смотрите, чтобы скопировать данные запроса с 100 серверов, надо последовательно вызвать PQexec 100 раз. Если запрос выполняется 10 секунд (9 секунд сам запрос и 1 сек копирование) - это уже 17 минут. Если запустить PQsendQuery то эти 9 секунд можно заспаралелить, и получить не 17 мин, а 1сек*100+9сек+ время на коннект до каждого сервера, т.е. получится около 2-х минут вместо 17. А если серверов не 100 а 1000, то эффект заметнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 11:43 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Melkij На запись можно отправлять построчно даже через один copy from тоже думал на счет этого, думал даже чтобы все запросы в один файл дописывали результат селекта и потом этот файл через COPY прогрузить куда надо. Но это потом, сейчас главное сделать парралельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 11:45 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
PQputCopyData получается невозможно организовать в несколько потоков? Запрос, который данные выбираетможно, а саму PQputCopyData нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 13:04 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Вопрос №5 Решен. Благодаря Melkij . Большое спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 14:12 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Вопрос №6 Пытаюсь сделать Код: sql 1.
в том же коннекте, где до этого уже было PQsendQuery. Выдает ошибку: another command is already in progress Подскажите что нужно сделать с коннектом, чтобы успешно выполнилось новое PQsendQuery? Делал вот что: PQconsumeInput(conn); PQclear(res); В итоге перед вызовом (prinntf показывает) PQisBusy(conn)= 0 PQconsumeInput(conn)= 1 А PQsendQuery все равно с ошибкой another command is already in progress Подскажите пожалуйста что еще надо сделать чтобы PQsendQuery успешно запустилась? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 14:43 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
PQresultStatus(res) = NULL перед попыnкой запуска PQsendQuery Скажите что еще можно проверить чтобы PQsendQuery повторно успешно запутилась? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 15:29 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Вопрос №6 закрыт ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2022, 01:39 |
|
Изучаю libpq c . Чтобы не плодить темы, создал эту.
|
|||
---|---|---|---|
#18+
Вопрос №7 Не получается сделать чтобы одновременно несколько разных передач данных работало одновременно: PQputCopyData->PQgetCopyData Создаю цикл где Код: sql 1.
и в нем внутри делаю на другой коннект Код: sql 1.
Даже с использованием PQsendQuery программа зависает, пока работает цикл. Нужен пример как это работает в режиме PQsetnonblocking. В исходниках постгресса именно в режиме PQsetnonblocking не нашел. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2022, 02:33 |
|
|
Start [/forum/topic.php?fid=53&tid=1993649&all=1]: |
0ms |
get settings: |
0ms |
get forum list: |
8ms |
check forum access: |
0ms |
check topic access: |
0ms |
track hit: |
27ms |
get topic data: |
4ms |
get forum data: |
1ms |
get page messages: |
29ms |
update_topic_read_status (1993649): 19.02.2022 13:45:39: |
0ms |
get tp. blocked users: |
0ms |
get online users: |
25ms |
check new: |
1ms |
others: | 97ms |
total: | 192ms |
0 / 0 |