PostgreSQL, Qt

Qt: Восстановление pg_restore БД PostgreSQL в Windows

Здесь: Qt: Резервная копия pg_dump БД PostgreSQL в Windows я показала один из способов организации создания резервной копии базы данных.

Сейчас речь пойдет о восстановлении базы из бэкапа. Здесь тоже будем использовать пакетный файл для вызова pg_restore.

Про каталог bin, файл паролей pgpass написано в статье по ссылке выше.

void myClass::restoreDatabase(QString name, QString file)
{
    QString errorMsg;
    QString connectionName = connectToDB(name, errorMsg);
    if (connectionName.isEmpty()){
        error(errorMsg);
        return;
    }
    QString binDir = postgresBinDirectory();
    if (binDir.isEmpty()) {
        qDebug() << "error";
        QSqlDatabase::removeDatabase(connectionName);
        return;
    }
    QSqlQuery query(QSqlDatabase::database(connectionName));
    if (!query.exec(QString("DROP SCHEMA public cascade;  "
                            "CREATE SCHEMA public "
                            "AUTHORIZATION postgres; "
                            "COMMENT ON SCHEMA public "
                            "IS 'standard public schema'; "
                            "GRANT ALL ON SCHEMA public TO PUBLIC; "
                            "GRANT ALL ON SCHEMA public TO %1;")
                    .arg(postgresUser))) {
        qDebug() << "error";
        QSqlDatabase::removeDatabase(connectionName);
        return;
    }
    QSqlDatabase::removeDatabase(connectionName);
    QString batText = QString("ECHO OFF \n"
                              "SET dmpfile=%1 \n"
                              "set text = Begin to restore...  \n"
                              "echo %text% \n"
                              "cd /d %2 \n"
                              "pg_restore --host=%4 --port=%5 "
                              "--username=%6 --verbose -d "
                              " %3 \"%dmpfile%\"\n"
                              "set /p id=\"The process is finished successfully. "
                              "Press Enter to exit...\"")
            .arg(file, binDir, name,
                 host, ui->port->text(), postgresUser);
    QString fileName = QString("%1-restore.bat")
            .arg(name);
    if (!writeBatFile(batText, fileName, 
					  QCoreApplication::applicationDirPath()+"/temp"))
        return;
//Вызов функции обновления файла паролей
    updatePgPassFile(QString("%1:%2:%3:%4:%5")
                     .arg(host,
                          ui->port->text(),
                          name,
                          postgresUser,
                          ui->password->text()));
    system(qPrintable("cmd.exe /c \""+
                      QDir::toNativeSeparators(
                          QString("%1/%2")
                          .arg(QCoreApplication::applicationDirPath()+"/temp")
                          .arg(fileName)+"\"")));
}
SQL, Базы данных

Основы баз данных. Логическая модель. 3 основные нормальные формы

Нормальные формы базы данныхВ статье Основы баз данных. ER-модель (сущность-связь) я рассказала про принцип построения этой самой модели. Это — отправная точка в создании базы данных. От модели сущность-связь необходимо перейти к логической модели — к тому виду, в котором и будет представлена наша база данных (не учитывая физическую модель) в выбранной системе управления базами данных (СУБД). Продолжить чтение «Основы баз данных. Логическая модель. 3 основные нормальные формы»

SQL, Базы данных, О том о сём

Основы баз данных. ER-модель (сущность-связь)

ER model заголовок статьиПару лет назад среди прочих моих занятий были онлайн уроки по основам построения логической структуры базы данных и языку SQL. Уроками на данный момент не занимаюсь, а вот сами записи остались, так что решила я их выложить, чего добру пропадать зря? 🙂

Сегодня речь пойдет о модели «сущность-связь», или entity-relationship model. Продолжить чтение «Основы баз данных. ER-модель (сущность-связь)»

Qt, Базы данных

Подключение к базе данных в Qt

Для подключения к базе данных нам необходимо включить в проект следующие классы:

[pastacode lang=»cpp» manual=»%23include%20%3CQMessageBox%3E%20%2F%2F%D0%B4%D0%BB%D1%8F%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0%20%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8E%0A%23include%20%3CQSqlDatabase%3E%0A%23include%20%3CQSqlError%3E» message=»» highlight=»» provider=»manual»/]

QMessageBox позволит вывести информацию о статусе подключения к базе данных, QSqlDatabase позволит совершить это подключение, а без QSqlError мы не сможем узнать, какая ошибка возникла при неудачном подключении к базе.
Необходимо также в тексте файла проекта (*.pro) указать следующее:

QT += sql

[pastacode lang=»cpp» manual=»%2F*QPSQL%20-%20%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B4%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80%D0%B0%20%D0%B4%D0%BB%D1%8F%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BA%20%D1%82%D0%BE%D0%B9%20%D0%B8%D0%BB%D0%B8%20%D0%B8%D0%BD%D0%BE%D0%B9%20%D0%A1%D0%A3%D0%91%D0%94%2C%20%D0%B2%20%D0%B4%D0%B0%D0%BD%D0%BD%D0%BE%D0%BC%20%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B5%20-%20%D0%BA%20PostgreSQL%3B%20%D0%B4%D0%BB%D1%8F%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BA%20%D0%B1%D0%B0%D0%B7%D0%B5%20MS%20SQL%20Server%20%D0%B2%D0%B0%D0%BC%20%D0%BD%D0%B5%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B8%D0%BC%D0%BE%20%D1%81%D0%BD%D0%B0%D1%87%D0%B0%D0%BB%D0%B0%20%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C%20%D0%B8%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20ODBC*%2F%0A%0AQSqlDatabase%20db%20%3D%20QSqlDatabase%3A%3AaddDatabase(%22QPSQL%22)%3B%20%20%2F*%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D0%BD%D0%B0%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B4%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80%D0%B0%20%D0%91%D0%94%20%D1%82%D0%B0%D0%BA%D0%B6%D0%B5%20%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D1%83%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D1%8C%20%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5%20%D0%BD%D0%B0%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BA%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D1%83%20%D0%91%D0%94%3A%20addDatabase(%22QPSQL%22%2C%20%22myConnection1%22)%0A%D0%B8%D0%BC%D1%8F%20%D0%B8%D0%BB%D0%B8%20%D0%B0%D0%B4%D1%80%D0%B5%D1%81%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%2C%20%D0%B3%D0%B4%D0%B5%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%A1%D0%A3%D0%91%D0%94*%2F%0Adb.setHostName(%22localhost%22)%3B%0A%2F%2F%D0%B8%D0%BC%D1%8F%20%D0%B1%D0%B0%D0%B7%D1%8B%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%0Adb.setDatabaseName(%22myDB%22)%3B%0A%2F%2F%D0%B8%D0%BC%D1%8F%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F%0Adb.setUserName(%22user1%22)%3B%0A%2F%2F%D0%B5%D0%B3%D0%BE%20%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8C%0Adb.setPassword(%22123321%22)%3B%0A%2F*%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D0%B2%D0%B0%D0%B5%D0%BC%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%3B%20%D0%B5%D1%81%D0%BB%D0%B8%20%D0%BD%D0%B5%D1%83%D0%B4%D0%B0%D1%87%D0%BD%D0%BE%20-%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B8%D0%BC%20%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BE%D0%B1%20%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B5*%2F%0Aif%20(!db.open())%0AQMessageBox%3A%3Acritical(NULL%2CQObject%3A%3Atr(%22%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0%22)%2Cdb.lastError().text())%3B» message=»» highlight=»» provider=»manual»/]

При попытке подключения к базе данных PostgreSQL можно получить сообщение об ошибке «Driver not loaded». Это значит, что ваша система не может найти драйвер PostgreSQL. Необходимо в системный путь (PATH) вписать пути к папкам lib и bin вашей версии СУБД.

При удачном подключении к базе данных все обращения к базе в вашем проекте будут автоматически распознавать это подключение. Если подключение было задано без наименования подключения, то оно будет расцениваться как подключение по умолчанию. В проекте обязательно должно быть такое подключение, иначе получим ошибку. Работая с потоками в проекте для каждого потока должно быть свое подключение под своим именем.

Подключение к базе данных Microsoft SQL Server в Qt.

Инфо обо мне: https://secretsilent.ru/info/