Important: Please read the Qt Code of Conduct -

PostgreSql and problem with lastInsertId()

  • I have a problem with method lastInsertId. I'm using a PostgreSql 8.4 and Qt 4.6.3 under Linux. I have a code like this:
    // _model is a QSqlTableModel
    QSqlRecord record = _model->record();
    _model->insertRecord( -1, record );

    SomeDialog* dialog = new SomeDialog( _model );
    if( dialog->result() == QDialog::Accepted )
        bool ok = _model->submitAll();
        if( ok )
            // allways 0 but in db is a new record
            qDebug() << _model->query().lastInsertId().toInt();
            qDebug() << _model->lastError().text();


    My table looks like this:

    CREATE TABLE mytable
    id serial NOT NULL,
    field1 text,
    CONSTRAINT mytable_pkey PRIMARY KEY (id),
    WITH (

    How can I get a inserted ID? I need select new row in QTableView and I need this information.

  • As far as I know lastInsertId() for PostgreSQL is supported at least with Qt 4.7. If this is not an option for you you might try the "RETURNING": clause in your queries.

  • Thanks for reply. Tomorrow I will test Qt 4.7. lastInsertId() returns a OIDS number from Pg(I know from Qt doc), but only in QSqlQuery(I tested this a few minuts ago), but with QSqlTableModel return always 0. I known a RETURNING but I want to stay with QSqlTableModel. Maybe I will change a little driver to Pg to implement a insert with returning. I need think about it what would be better.

Log in to reply