Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. 3rd Party Software
  4. PostgreSQL event notification with payload

PostgreSQL event notification with payload

Scheduled Pinned Locked Moved Solved 3rd Party Software
6 Posts 2 Posters 1.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • U Offline
    U Offline
    Ucn_
    wrote on last edited by
    #1

    Hello. I was using ODBC driver for sql server, however after learning that ODBC doesn't support eventNotification I tried to add that feature by building the driver with no success I changed to PSQL driver and used psql by downloading the binary files and adding to the path. It worked. I test the event notification and it works. However I would like to send the notification with the affected row information. I was able to connect with the two signal and slot, but I don't know how to work with the payload. I am new to postgres. This is how I achieved the event notification.

    In the postgresql server:

    CREATE RULE Eventnotifications AS ON INSERT TO test DO NOTIFY sendToEventNots
    

    In my app:

    bool ok = db.open();
    
            if (ok)
            {
                qDebug() << "Database connected";
                bool eventNot= db.driver()->hasFeature(QSqlDriver::EventNotifications);
                qDebug() << "Has feature eventNotification" << eventNot;
                db.driver()->subscribeToNotification("sendToEventNots");
                qDebug() << "Connected Info" <<  db.databaseName();
     
            }
    
            connect(db.driver(), SIGNAL(notification(const QString&)),
                    this, SLOT(notificationReceived(const QString&)));
    
            connect(db.driver(), QOverload<const QString &>::of(&QSqlDriver::notification),
                [this](const QString &sendToEventNots){
    
                qDebug() << "Event received";
            });
    }
    
    void MainWindow::notificationReceived(const QString&){
    
       qDebug() << "Notification received";
    }
    
    

    The above two connect work. I would like to do something like this:
    In server:

    CREATE RULE Eventnotifications AS ON INSERT TO test DO NOTIFY sendToEventNots, {"userid":the user Id, "value1": value1,"value2":value2,"action":"grok"}
    

    in my app:

    connect(sqlDriver, QOverload<const QString &, QSqlDriver::NotificationSource, const QVariant &>::of(&QSqlDriver::notification),
        [=](const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload){ /* ... */ });
    

    How can I achieve this, and be able to receive the values? Is it possible? Thanks

    1 Reply Last reply
    0
    • U Offline
      U Offline
      Ucn_
      wrote on last edited by
      #6

      I solved by creating a stored procedure then passing the values to a json object. Created a trigger on Insert then execute the procedure. In my app it detects the source with switch case. I followed some examples and implemented to my needs.

      1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #2

        Hi,

        Don't you have them in the QVariant you receive ?

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        U 1 Reply Last reply
        1
        • SGaistS SGaist

          Hi,

          Don't you have them in the QVariant you receive ?

          U Offline
          U Offline
          Ucn_
          wrote on last edited by
          #3

          @SGaist I don't know what the source is.

          1 Reply Last reply
          0
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by
            #4

            What source are you talking about ?

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            U 1 Reply Last reply
            1
            • SGaistS SGaist

              What source are you talking about ?

              U Offline
              U Offline
              Ucn_
              wrote on last edited by
              #5

              @SGaist In the last example, I believe I'm not setting the payload the right way on the server. Maybe the way I do, I receive empty Qstring

              1 Reply Last reply
              0
              • U Offline
                U Offline
                Ucn_
                wrote on last edited by
                #6

                I solved by creating a stored procedure then passing the values to a json object. Created a trigger on Insert then execute the procedure. In my app it detects the source with switch case. I followed some examples and implemented to my needs.

                1 Reply Last reply
                0

                • Login

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • Users
                • Groups
                • Search
                • Get Qt Extensions
                • Unsolved