2016-07-19 7 views
1

Я пишу C++ applicationatoin, которому необходимо получать уведомления об изменениях данных из PostgreSQL через библиотеку libpqxx. Но это tutorial не включает такой пример использования. Уведомления должны быть получены по нескольким каналам. Также я использую boost::asio как сетевую библиотеку, и для меня предпочтительнее использовать asio классы сокетов с асинхронными обратными вызовами для уведомлений, а не для опроса сырых сокетов типа BSD. Может ли кто-нибудь предоставить пример кода для этого или ссылки на некоторые внешние ресурсы для того, как это можно достичь?Как использовать libpqxx для получения уведомлений из базы данных PostgreSQL?

+0

Кто вам сказал, что Postgresql может уведомлять клиента о «изменении данных»? В Postgresql ничего такого нет. Единственное, что имеет Postgresql, - это абстрактное средство оповещения/уведомления о сигнале между взаимодействующими клиентскими процессами. –

+1

Я имею в виду функцию NOTIFY, которая может использоваться вместе с триггерами. [Здесь] (https://www.postgresql.org/docs/9.5/static/sql-notify.html) - это документация. Клиентское приложение может открывать сокет в базу данных и прослушивать уведомления по данному каналу. – bobeff

ответ

1

Вам нужен класс, производный от 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.

+0

Возможно ли интегрировать получение уведомлений с циклом событий _boost :: asio_? – bobeff

+0

Если во избежание опроса действительно важно, я бы использовал libpq вместо libpqxx. См. Https://www.postgresql.org/docs/9.1/static/libpq-notify.html за советом об избежании опроса. Менее уверенно: я думаю, что прямая интеграция с asio практически невозможна. Я бы запускал отдельный поток исключительно для получения уведомлений с помощью libpq, а затем передавал уведомления в asio hairball с помощью io_service :: post. – NovaDenizen

+0

10x Мне удалось интегрировать * libpqxx * с * boost :: asio *, используя * null_buffers * функциональность * asio *. – bobeff