Я пишу C++ applicationatoin, которому необходимо получать уведомления об изменениях данных из PostgreSQL через библиотеку libpqxx. Но это tutorial не включает такой пример использования. Уведомления должны быть получены по нескольким каналам. Также я использую boost::asio как сетевую библиотеку, и для меня предпочтительнее использовать asio классы сокетов с асинхронными обратными вызовами для уведомлений, а не для опроса сырых сокетов типа BSD. Может ли кто-нибудь предоставить пример кода для этого или ссылки на некоторые внешние ресурсы для того, как это можно достичь?Как использовать libpqxx для получения уведомлений из базы данных PostgreSQL?
ответ
Вам нужен класс, производный от pqxx::notification_receiver
см http://pqxx.org/devprojects/libpqxx/doc/4.0/html/Reference/a00208.html «Уведомления и приемники» и http://pqxx.org/devprojects/libpqxx/doc/4.0/html/Reference/a00062.html который является ссылка API для notification_receiver
.
Возможно ли интегрировать получение уведомлений с циклом событий _boost :: asio_? – bobeff
Если во избежание опроса действительно важно, я бы использовал libpq вместо libpqxx. См. Https://www.postgresql.org/docs/9.1/static/libpq-notify.html за советом об избежании опроса. Менее уверенно: я думаю, что прямая интеграция с asio практически невозможна. Я бы запускал отдельный поток исключительно для получения уведомлений с помощью libpq, а затем передавал уведомления в asio hairball с помощью io_service :: post. – NovaDenizen
10x Мне удалось интегрировать * libpqxx * с * boost :: asio *, используя * null_buffers * функциональность * asio *. – bobeff
Кто вам сказал, что Postgresql может уведомлять клиента о «изменении данных»? В Postgresql ничего такого нет. Единственное, что имеет Postgresql, - это абстрактное средство оповещения/уведомления о сигнале между взаимодействующими клиентскими процессами. –
Я имею в виду функцию NOTIFY, которая может использоваться вместе с триггерами. [Здесь] (https://www.postgresql.org/docs/9.5/static/sql-notify.html) - это документация. Клиентское приложение может открывать сокет в базу данных и прослушивать уведомления по данному каналу. – bobeff