Разное

Postgresql qt загрузить файл: Урок 066. Загрузка файлов на FTP сервер

Содержание

Как получить доступ к Postgresql с помощью Qt в Windows

Я разрабатываю приложение с использованием QtRuby и PostgreSQL. Я успешно развивался и успешно работал в Linux. Теперь я хочу запустить то же самое приложение в windows. Но мне не удается подключиться к базе данных(postgresql). Я получаю следующие ошибки:

 QSqlDatabase: QPSQL driver not loaded
 QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC

windows

postgresql

qtruby

Поделиться

Источник


Unknown    

16 марта 2009 в 07:09

4 ответа


  • Как получить доступ к PostgreSQL с помощью Silverlight

    Я создаю игру hangman с silverlight ironpython и использую данные в postgresql для случайного слова, но я не знаю, как получить доступ к данным в postgresql в silverlight. как это можно или нужно сделать? Спасибо!!

  • Не удалось получить доступ к Postgresql из CMD в Windows

    Я установил OpenGeo Suite 2.4.5 в windows 7. Я хочу получить доступ к postgresql из cmd, но когда я пытаюсь получить к нему доступ, я получаю эту ошибку: psql: could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host ??? and accepting TCP/IP connections on…



2

Как говорится в сообщении об ошибке, драйвер QPSQL недоступен для Qt для разговора с Postgres. Вероятно, плагин еще не был скомпилирован.

Как указано в этом руководстве, вам необходимо установить библиотеки разработчиков PostgreSQL, а затем вручную создать плагин драйвера Qt. Точные команды см. В инструкции.

Поделиться


MattJ    

16 марта 2009 в 08:20


Поделиться


Marek Miettinen    

26 января 2012 в 08:17



0

Postgresql использование QT в Windows: как скомпилировать драйвер QPSQL-MinGw-Win7

1) Проверьте каталог установки в моем компьютере:

PostgreSQL (32 bit)    C:\PSQL32\bin
Qt (32 bit)            C:\QT\4.8.0\bin
MingW32                C:\QT\qtcreator-2.4.0\mingw\bin      

2) Добавьте эти 3 каталога в system PATH

3) Скачать ‘mingw-utils’ и установить в C:\Qt\4.8.0\bin (нужна утилита REIMP.exe)

4) libpq.lib конвертировать в удобный формат для mingw32:

CD C:\PSQL32\lib

REIMP -д libpq.lib

Откройте libpq.def и удалите ALL «_» в начале определений

dlltool —input-def libpq.def —output-lib libpq.a —dllname libpq.dll

5) составить:

CD C:\Qt\4.8.0\src\plugins\sqldrivers\psql

qmake-o Makefile «INCLUDEPATH+=C:\PSQL32\include» «LIBS+=C:\PSQL32\lib\libpq.a» psql.pro

mingw32-make debug

mingw32-сделать релиз

10) копия dll:

libqsqlpsqld4.a   qsqlpsqld4.dll    (debug)  

libqsqlpsql4.a   qsqlpsql4.dll      (release)

в справочнике:

C:\Qt\4.8.0\plugins\sqldrivers

NEW проблема для QT версии 5.01

существует несколько определений struct timespec

в файле pthread.h из PostgreSQL (C:\PSQL32\include\pthread.h)

заменять:

#ifndef HAVE_STRUCT_TIMESPEC

с:

#if ((!определенными(_TIMESPEC_DEFINED)) && (!определенными(HAVE_STRUCT_TIMESPEC)))


Сделано 🙂

Фауст

Поделиться


Fausto Tomei    

22 марта 2013 в 19:06


  • Как получить доступ к данным ресурса Qt из функций, не относящихся к Qt

    Насколько я понимаю, способ упаковки некодовых ресурсов, таких как файлы данных в приложении Qt, заключается в использовании системы ресурсов. Однако что делать, если я хочу получить доступ к ресурсу с помощью функции, отличной от Qt? Например, у меня может быть файл .txt или .csv с некоторыми…

  • Postgresql libpq с Qt в windows

    Я пытаюсь подключиться к удаленной базе данных postgresql из qt с помощью libpq.lib. У меня есть установка postgresql на моей машине, и я установил драйверы ODBC. Я использую базу данных с java/jdbc. в своей работе Qt все, что я могу сделать, это заставить мое приложение неожиданно выйти из строя,…



0

Отлично! Дело сделано!
Однако есть несколько советов на которые стоит обратить внимание:
1. Mingw-utils, 0.4-1 не будет работать на Windows 7, мы должны использовать 0.3.
2.в каталоге драйвера PSQL есть файл psql.json, пожалуйста, не удаляйте его.

Поделиться


user2476916    

12 июня 2013 в 04:39


Похожие вопросы:

Qt на Mac — как получить доступ к «search» в меню справки

Я портирую свое приложение Qt на Mac OS X. На Windows/Linux я использовал QLineEdit для предоставления функции поиска в меню справки. В Mac OS X я видел что-то вроде этого встроенного: Как я могу…

Как получить доступ к акселерометру мобильного устройства Windows?

Я успешно портировал свое приложение Qt на основе C++ на мобильное устройство моей подруги Windows. (A Samsung Omnia 2.) Однако, похоже, что Qt Mobility Sensors API не поддерживается на Windows…

Как показать прогресс в панели задач windows 7 (используя Qt)?

Есть ли способ получить доступ к индикатору прогресса windows 7 с помощью Qt? В настоящее время я использую Qt 4.7.0 с Qt Creator. Я уже нашел Q7Goodies , но, к сожалению, это не бесплатно. Таким…

Как получить доступ к PostgreSQL с помощью Silverlight

Я создаю игру hangman с silverlight ironpython и использую данные в postgresql для случайного слова, но я не знаю, как получить доступ к данным в postgresql в silverlight. как это можно или нужно…

Не удалось получить доступ к Postgresql из CMD в Windows

Я установил OpenGeo Suite 2.4.5 в windows 7. Я хочу получить доступ к postgresql из cmd, но когда я пытаюсь получить к нему доступ, я получаю эту ошибку: psql: could not connect to server:…

Как получить доступ к данным ресурса Qt из функций, не относящихся к Qt

Насколько я понимаю, способ упаковки некодовых ресурсов, таких как файлы данных в приложении Qt, заключается в использовании системы ресурсов. Однако что делать, если я хочу получить доступ к…

Postgresql libpq с Qt в windows

Я пытаюсь подключиться к удаленной базе данных postgresql из qt с помощью libpq.lib. У меня есть установка postgresql на моей машине, и я установил драйверы ODBC. Я использую базу данных с…

Доступ к базе данных Websql с помощью Qt

Я создаю веб-приложение, и мне нужно сохранить некоторые данные в базе данных, к которой также можно получить доступ с помощью Qt. Что мне нужно, так это вставить значения из веб-приложения и…

Как получить доступ к UWP APIs из приложения Qt?

Я создаю приложение для запуска на Windows 10 с помощью Qt Creator. Можно ли получить доступ к rich APIs, доступному для UWP приложений из моего проекта C++ Qt? Я видел этот учебник , но он просто…

Можно ли получить прямой доступ к PostgreSQL?

Я видел такие продукты, как InfluxDB, которые расширяют PostgreSQL. Эти продукты предполагают, что они используют PostgreSQL непосредственно (доступ к данным в его примитивной форме, без SQL)….

c++ — Qt and PostgreSQL

пытаюсь соединить QtCreator и бд PostgreSQL, делаю все по этому гайду — http://easy-qt.blogspot.com/2012/10/postgresql-qt-windows-mingw.html
psql.dll закинул в директорию C:\Qt\Qt5.14.1\Tools\QtCreator\lib\qtcreator\plugins

Все собирается(вроде как), никаких ошибок нет, начинаю вбивать пример подключения к бд отсюда — https://eax.me/libpq/
(код прикладывать пока не буду, т.к. он полностью копирует код из примера выше)
ловлю целую уйму ошибок о том, что какие-то типы не обьявлены

вот вывод:

15:26:24: Настройки не изменились, этап qmake пропускается.
15:26:24: Запускается: «C:\Qt\Qt5.14.1\Tools\mingw730_64\bin\mingw32-make.exe» -j4
g++ -c -fno-keep-inline-dllexport -g -std=gnu++11 -Wall -Wextra -Wextra -fexceptions -mthreads -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_SQL_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I..\XBIhandler -I. -I..\..\..\postgresql-12.2\src\include -I..\..\..\postgresql-12.2\src\interfaces\libpq -I..\..\..\Qt\Qt5.14.1\5.14.1\mingw73_64\include -I..\..\..\Qt\Qt5.14.1\5.14.1\mingw73_64\include\QtWidgets -I..\..\..\Qt\Qt5.14.1\5.14.1\mingw73_64\include\QtGui -I..\..\..\Qt\Qt5.14.1\5.14.1\mingw73_64\include\QtANGLE -I..\..\..\Qt\Qt5.14.1\5.14.1\mingw73_64\include\QtSql -I..\..\..\Qt\Qt5.14.1\5.14.1\mingw73_64\include\QtCore -I. -I. -I/include -I..\..\..\Qt\Qt5.14.1\5.14.1\mingw73_64\mkspecs\win32-g++  -o main.o ..\XBIhandler\main.cpp
g++ -Wl,-subsystem,windows -mthreads -o XBIhandler.exe ctest.o main.o mainwindow.o moc_ctest.o moc_mainwindow.o  C:\postgresql-12.2\src\interfaces\libpq\libpq.dll C:\Qt\Qt5.14.1\5.14.1\mingw73_64\lib\libQt5Widgets.a C:\Qt\Qt5.14.1\5.14.1\mingw73_64\lib\libQt5Gui.a C:\Qt\Qt5.14.1\5.14.1\mingw73_64\lib\libQt5Sql.a C:\Qt\Qt5.14.1\5.14.1\mingw73_64\lib\libQt5Core.a  -lmingw32 C:\Qt\Qt5.14.1\5.14.1\mingw73_64\lib\libqtmain.a -LC:\openssl\lib -LC:\Utils\my_sql\mysql-5.7.25-winx64\lib -LC:\Utils\postgresql\pgsql\lib -lshell32 
main.o: In function `terminate':
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:37: undefined reference to `PQerrorMessage'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:40: undefined reference to `PQclear'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:43: undefined reference to `PQfinish'
main.o: In function `clearRes':
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:51: undefined reference to `PQclear'
main.o: In function `main':
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:67: undefined reference to `PQlibVersion'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:70: undefined reference to `PQconnectdb'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:71: undefined reference to `PQstatus'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:77: undefined reference to `PQsetNoticeProcessor'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:79: undefined reference to `PQserverVersion'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:80: undefined reference to `PQuser'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:81: undefined reference to `PQdb'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:88: undefined reference to `PQexec'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:91: undefined reference to `PQresultStatus'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:95: undefined reference to `PQexec'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:96: undefined reference to `PQresultStatus'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:115: undefined reference to `PQexecParams'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:117: undefined reference to `PQresultStatus'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:122: undefined reference to `PQexec'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:124: undefined reference to `PQresultStatus'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:127: undefined reference to `PQnfields'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:131: undefined reference to `PQfname'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:136: undefined reference to `PQntuples'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:139: undefined reference to `PQgetvalue'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:140: undefined reference to `PQgetvalue'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:141: undefined reference to `PQgetvalue'
C:\c++\QTprograms\build-XBIhandler-Desktop_Qt_5_14_1_MinGW_64_bit-Debug/../XBIhandler/main.cpp:142: undefined reference to `PQgetvalue'
collect2.exe: error: ld returned 1 exit status
mingw32-make: *** [Makefile:79: XBIhandler.exe] Error 1
15:26:27: Процесс «C:\Qt\Qt5.14.1\Tools\mingw730_64\bin\mingw32-make.exe» завершился с кодом 2.
Ошибка при сборке/развёртывании проекта XBIhandler (комплект: Desktop Qt 5.14.1 MinGW 64-bit)
Во время выполнения этапа «Сборка»
15:26:27: Прошло времени: 00:02.

файл XBIhandler.pro(собственно мое приложение)

QT       += sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    ctest.cpp \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    ctest.h \
    mainwindow.h

FORMS += \
    mainwindow.ui

INCLUDEPATH += C:/postgresql-12.2/src/include
INCLUDEPATH += C:/postgresql-12.2/src/interfaces/libpq
LIBS+= C:/postgresql-12.2/src/interfaces/libpq/libpq.dll

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

файл psql.pro


HEADERS += $$PWD/qsql_psql_p.h
SOURCES += $$PWD/qsql_psql.cpp $$PWD/main.cpp
INCLUDEPATH+="C:/Program Files/PostgreSQL/10/include"
LIBS+="C:/Program Files/PostgreSQL/10/lib/libpq.lib"

QMAKE_USE += psql

OTHER_FILES += psql.json 

PLUGIN_CLASS_NAME = QPSQLDriverPlugin
include(../qsqldriverbase.pri)

создаём простое приложение с PyQt и Qt Designer

Эта статья предназначена для тех, кто только начинает своё знакомство с созданием приложений с графическим интерфейсом (GUI) на Python. В ней мы рассмотрим основы использования PyQt в связке с Qt Designer. Шаг за шагом мы создадим простое Python GUI приложение, которое будет отображать содержимое выбранной директории.

Что нам потребуется

Нам понадобятся PyQt и Qt Designer, ну и Python, само собой.

В этой статье используется PyQt5 с Python 3, но особых различий между PyQt и PySide или их версиями для Python 2 нет.

Windows: PyQt можно скачать здесь. В комплекте с ним идёт Qt Designer.

macOS: Вы можете установить PyQt с помощью Homebrew:

$ brew install pyqt5

Скачать пакет с большинством компонентов и инструментов Qt, который содержит Qt Designer, можно по этой ссылке.

Linux: Всё нужное, вероятно, есть в репозиториях вашего дистрибутива. Qt Designer можно установить из Центра Приложений, но PyQt придётся устанавливать через терминал. Установить всё, что нам понадобится, одной командой можно, например, так:

# для Fedora:
$ sudo dnf install python3-qt5 qt-creator
# для Debian/Ubuntu:
$ sudo apt install python3-qt5 pyqt5-dev-tools qtcreator

После того как вы закончили с приготовлениями, откройте командную строку/терминал и убедитесь, что вы можете использовать команду pyuic5. Вы должны увидеть следующее:

$ pyuic5
Error: one input ui-file must be specified

Если вы видите сообщение, что такой команды нет или что-то в таком роде, попробуйте загуглить решение проблемы для вашей операционной системы и версии PyQt.

Если вы используете Windows, то, скорее всего, путь C:\Python36\Scripts (измените 36 на вашу версию Python) не прописан в вашем PATH. Загляните в этот тред на Stack Overflow, чтобы узнать, как решить проблему.

Дизайн

Основы

Теперь, когда у нас всё готово к работе, давайте начнём с простого дизайна.

Откройте Qt Designer, где вы увидите диалог новой формы, выберите Main Window и нажмите Create.

После этого у вас должна появиться форма — шаблон для окна, размер которого можно менять и куда можно вставлять объекты из окна виджетов и т.д. Ознакомьтесь с интерфейсом, он довольно простой.

Теперь давайте немного изменим размер нашего главного окна, т.к. нам не нужно, чтобы оно было таким большим. А ещё давайте уберём автоматически добавленное меню и строку состояния, поскольку в нашем приложении они не пригодятся.

Все элементы формы и их иерархия по умолчанию отображаются в правой части окна Qt Designer под названием Object Inspector. Вы с лёгкостью можете удалять объекты, кликая по ним правой кнопкой мыши в этом окне. Или же вы можете выбрать их в основной форме и нажать клавишу DEL на клавиатуре.

В итоге мы имеем почти пустую форму. Единственный оставшийся объект — centralwidget, но он нам понадобится, поэтому с ним мы ничего не будем делать.

Теперь перетащите куда-нибудь в основную форму List Widget (не List View) и Push Button из Widget Box.

Макеты

Вместо использования фиксированных позиций и размеров элементов в приложении лучше использовать макеты. Фиксированные позиции и размеры у вас будут выглядеть хорошо (пока вы не измените размер окна), но вы никогда не можете быть уверены, что всё будет точно так же на других машинах и/или операционных системах.

Макеты представляют собой контейнеры для виджетов, которые будут удерживать их на определённой позиции относительно других элементов. Поэтому при изменении размера окна размер виджетов тоже будет меняться.

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

Теперь в меню Qt Designer нажмите Form, затем выберите Preview и увидите что-то похожее на скриншот выше. Выглядит хорошо, не так ли? Но вот что случится, когда мы изменим размер окна:

Наши объекты остались на тех же местах и сохранили свои размеры, несмотря на то что размер основного окна изменился и кнопку почти не видно. Вот поэтому в большинстве случаев стоит использовать макеты. Конечно, бывают случаи, когда вам, например, нужна фиксированная или минимальная/максимальная ширина объекта. Но вообще при разработке приложения лучше использовать макеты.

Основное окно уже поддерживает макеты, поэтому нам ничего не нужно добавлять в нашу форму. Просто кликните правой кнопкой мыши по Main Window в Object Inspector и выберите Lay outLay out vertically. Также вы можете кликнуть правой кнопкой по пустой области в форме и выбрать те же опции:

Ваши элементы должны быть в том же порядке, что и до внесённых изменений, но если это не так, то просто перетащите их на нужное место.

Так как мы использовали вертикальное размещение, все элементы, которые мы добавим, будут располагаться вертикально. Можно комбинировать размещения для получения желаемого результата. Например, горизонтальное размещение двух кнопок в вертикальном будет выглядеть так:

Если у вас не получается переместить элемент в главном окне, вы можете сделать это в окне Object Inspector.

Последние штрихи

Теперь, благодаря вертикальному размещению, наши элементы выровнены правильно. Единственное, что осталось сделать (но не обязательно), — изменить имя элементов и их текст.

В простом приложении вроде этого с одним лишь списком и кнопкой изменение имён не обязательно, так как им в любом случае просто пользоваться. Тем не менее правильное именование элементов — то, к чему стоит привыкать с самого начала.

Свойства элементов можно изменить в разделе Property Editor.

Подсказка: вы можете менять размер, передвигать или добавлять часто используемые элементы в интерфейс Qt Designer для ускорения рабочего процесса. Вы можете добавлять скрытые/закрытые части интерфейса через пункт меню View.

Нажмите на кнопку, которую вы добавили в форму. Теперь в Property Editor вы должны видеть все свойства этого элемента. В данный момент нас интересуют objectName и text в разделе QAbstractButton. Вы можете сворачивать разделы в Property Editor нажатием по названию раздела.

Измените значение objectName на btnBrowse и text на Выберите папку.

Должно получиться так:

Именем объекта списка является listWidget, что вполне подходит в данном случае.

Сохраните дизайн как design.ui в папке проекта.

Превращаем дизайн в код

Конечно, можно использовать .ui-файлы напрямую из Python-кода, однако есть и другой путь, который может показаться легче. Можно конвертировать код .ui-файла в Python-файл, который мы потом сможем импортировать и использовать. Для этого мы используем команду pyuic5 из терминала/командной строки.

Чтобы конвертировать .ui-файл в Python-файл с названием design.py, используйте следующую команду:

$ pyuic5 path/to/design.ui -o output/path/to/design.py

Пишем код

Теперь у нас есть файл design.py с нужной частью дизайна нашего приложения и мы начинать работу над созданием его логики.

Создайте файл main.py в папке, где находится design.py.

Другие интересные статьи по Python.

Используем дизайн

Для Python GUI приложения понадобятся следующие модули:

import sys  # sys нужен для передачи argv в QApplication
from PyQt5 import QtWidgets

Также нам нужен код дизайна, который мы создали ранее, поэтому его мы тоже импортируем:

import design  # Это наш конвертированный файл дизайна

Так как файл с дизайном будет полностью перезаписываться каждый раз при изменении дизайна, мы не будем изменять его. Вместо этого мы создадим новый класс ExampleApp, который объединим с кодом дизайна для использования всех его функций:

class ExampleApp(QtWidgets.QMainWindow, design.Ui_MainWindow):
    def __init__(self):
        # Это здесь нужно для доступа к переменным, методам
        # и т.д. в файле design.py
        super().__init__()
        self.setupUi(self)  # Это нужно для инициализации нашего дизайна

В этом классе мы будем взаимодействовать с элементами интерфейса, добавлять соединения и всё остальное, что нам потребуется. Но для начала нам нужно инициализировать класс при запуске кода. С этим мы разберёмся в функции main():

def main():
    app = QtWidgets.QApplication(sys.argv)  # Новый экземпляр QApplication
    window = ExampleApp()  # Создаём объект класса ExampleApp
    window.show()  # Показываем окно
    app.exec_()  # и запускаем приложение

И чтобы выполнить эту функцию, мы воспользуемся привычной конструкцией:

if __name__ == '__main__':  # Если мы запускаем файл напрямую, а не импортируем
    main()  # то запускаем функцию main()

В итоге main.py выглядит таким образом:

import sys  # sys нужен для передачи argv в QApplication
from PyQt5 import QtWidgets
import design  # Это наш конвертированный файл дизайна

class ExampleApp(QtWidgets.QMainWindow, design.Ui_MainWindow):
    def __init__(self):
        # Это здесь нужно для доступа к переменным, методам
        # и т.д. в файле design.py
        super().__init__()
        self.setupUi(self)  # Это нужно для инициализации нашего дизайна

def main():
    app = QtWidgets.QApplication(sys.argv)  # Новый экземпляр QApplication
    window = ExampleApp()  # Создаём объект класса ExampleApp
    window.show()  # Показываем окно
    app.exec_()  # и запускаем приложение

if __name__ == '__main__':  # Если мы запускаем файл напрямую, а не импортируем
    main()  # то запускаем функцию main()

Если запустить этот код: $ python3 main.py, то наше приложение запустится!

Но нажатие на кнопку ничего не даёт, поэтому нам придётся с этим разобраться.

Добавляем функциональность в наше Python GUI приложение

Примечание Весь дальнейший код пишется внутри класса ExampleApp.

Начнём с кнопки Выберите папку. Привязать к функции событие вроде нажатия на кнопку можно следующим образом:

self.btnBrowse.clicked.connect(self.browse_folder)

Добавьте эту строку в метод __init__ класса ExampleApp, чтобы выполнить привязку при запуске приложения. А теперь взглянем на неё поближе:

  • self.btnBrowse: здесь btnBrowse — имя объекта, который мы определили в Qt Designer. self говорит само за себя и означает принадлежность к текущему классу;
  • clicked — событие, которое мы хотим привязать. У разных элементов разные события, например, у виджетов списка есть itemSelectionChanged и т.д.;
  • connect() — метод, который привязывает событие к вызову переданной функции;
  • self.browse_folder — просто функция (метод), которую мы описали в классе ExampleApp.

Для открытия диалога выбора папки мы можем использовать встроенный метод QtWidgets.QFileDialog.getExistingDirectory:

directory = QtWidgets.QFileDialog.getExistingDirectory(self, "Выберите папку")

Если пользователь выберет директорию, переменной directory присвоится абсолютный путь к выбранной директории, в противном случае она будет равна None. Чтобы не выполнять код дальше, если пользователь закроет диалог, мы используем команду if directory:.

Для отображения содержимого директории нам нужно импортировать os:

import os

И получить список содержимого следующим образом:

os.listdir(path)

Для добавления элементов в listWidget мы используем метод addItem(), а для удаления всех элементов у нас есть self.listWidget.clear().

В итоге функция browse_folder должна выглядеть так:

def browse_folder(self):
    self.listWidget.clear()  # На случай, если в списке уже есть элементы
    directory = QtWidgets.QFileDialog.getExistingDirectory(self, "Выберите папку")
    # открыть диалог выбора директории и установить значение переменной
    # равной пути к выбранной директории

    if directory:  # не продолжать выполнение, если пользователь не выбрал директорию
        for file_name in os.listdir(directory):  # для каждого файла в директории
            self.listWidget.addItem(file_name)   # добавить файл в listWidget

Теперь, если запустить приложение, нажать на кнопку и выбрать директорию, мы увидим:

Так выглядит весь код нашего Python GUI приложения:

import sys  # sys нужен для передачи argv в QApplication
import os  # Отсюда нам понадобятся методы для отображения содержимого директорий

from PyQt5 import QtWidgets

import design  # Это наш конвертированный файл дизайна

class ExampleApp(QtWidgets.QMainWindow, design.Ui_MainWindow):
    def __init__(self):
        # Это здесь нужно для доступа к переменным, методам
        # и т.д. в файле design.py
        super().__init__()
        self.setupUi(self)  # Это нужно для инициализации нашего дизайна
        self.btnBrowse.clicked.connect(self.browse_folder)  # Выполнить функцию browse_folder
                                                            # при нажатии кнопки

    def browse_folder(self):
        self.listWidget.clear()  # На случай, если в списке уже есть элементы
        directory = QtWidgets.QFileDialog.getExistingDirectory(self, "Выберите папку")
        # открыть диалог выбора директории и установить значение переменной
        # равной пути к выбранной директории

        if directory:  # не продолжать выполнение, если пользователь не выбрал директорию
            for file_name in os.listdir(directory):  # для каждого файла в директории
                self.listWidget.addItem(file_name)   # добавить файл в listWidget

def main():
    app = QtWidgets.QApplication(sys.argv)  # Новый экземпляр QApplication
    window = ExampleApp()  # Создаём объект класса ExampleApp
    window.show()  # Показываем окно
    app.exec_()  # и запускаем приложение

if __name__ == '__main__':  # Если мы запускаем файл напрямую, а не импортируем
    main()  # то запускаем функцию main()

 


Это были основы использования Qt Designer и PyQt для разработки Python GUI приложения. Теперь вы можете спокойно изменять дизайн приложения и использовать команду pyuic5 без страха потерять написанный код.

Перевод статьи «PyQt: Getting started with PyQt and Qt Designer»

PostgreSQL : Документация: 9.4: Регистрация ошибок и протоколирование работы сервера : Компания Postgres Professional

log_destination (string)

PostgreSQL поддерживает несколько методов протоколирования сообщений сервера: stderr, csvlog и syslog. На Windows также поддерживается eventlog. В качестве значения log_destination указывается один или несколько методов протоколирования, разделённых запятыми. По умолчанию используется stderr. Параметр можно задать только в конфигурационных файлах или в командной строке при запуске сервера.

Если в log_destination включено значение csvlog, то протоколирование ведётся в формате CSV (разделённые запятыми значения). Это удобно для программной обработки журнала. Подробнее об этом в Подразделе 18.8.4. Для вывода в формате CSV должен быть включён logging_collector.

Замечание: В большинстве систем Unix потребуется изменить конфигурацию системного демона syslog для использования варианта syslog в log_destination. Для указания типа протоколируемой программы (facility), PostgreSQL может использовать значения с LOCAL0 по LOCAL7 (см. syslog_facility). Однако, на большинстве платформ, конфигурация syslog по умолчанию не учитывает сообщения подобного типа. Чтобы это работало, потребуется добавить в конфигурацию демона syslog что-то подобное:

local0.*    /var/log/postgresql

Для использования eventlog в log_destination на Windows, необходимо зарегистрировать источник событий и его библиотеку в операционной системе. Тогда Windows Event Viewer сможет отображать сообщения журнала событий. Подробнее в Разделе 17.11.

logging_collector (boolean)

Параметр включает коллектор сообщений (logging collector). Это фоновый процесс, который собирает отправленные в stderr сообщения и перенаправляет их в журнальные файлы. Такой подход зачастую более полезен чем запись в syslog, поскольку некоторые сообщения в syslog могут не попасть. (Типичный пример с сообщениями об ошибках динамического связывания, другой пример — ошибки в скриптах типа archive_command.) Для установки параметра требуется перезапуск сервера.

Замечание: Можно обойтись без коллектора сообщений и просто писать в stderr. Сообщения будут записываться в место, куда направлен поток stderr. Такой способ подойдёт только для небольших объёмов протоколирования, потому что не предоставляет удобных средств для организации ротации журнальных файлов. Кроме того, на некоторых платформах отказ от использования коллектора сообщений может привести к потере или искажению сообщений, так как несколько процессов, одновременно пишущих в один журнальный файл, могут перезаписывать информацию друг друга.

Замечание: Коллектор спроектирован так, чтобы сообщения никогда не терялись. А это значит, что при очень высокой нагрузке, серверные процессы могут быть заблокированы при попытке отправить сообщения во время сбоя фонового процесса коллектора. В противоположность этому, syslog предпочитает удалять сообщения, при невозможности их записать. Поэтому часть сообщений может быть потеряна, но система не будет блокироваться.

log_directory (string)

При включённом logging_collector, определяет каталог, в котором создаются журнальные файлы. Можно задавать как абсолютный путь, так и относительный от каталога данных кластера. Параметр можно задать только в конфигурационных файлах или в командной строке при запуске сервера. Значение по умолчанию pg_log.

log_filename (string)

При включённом logging_collector, задаёт имена журнальных файлов. Значение трактуется как строка формата в функции strftime, поэтому в ней можно использовать спецификаторы % для включения в имена файлов информации о дате и времени. (При наличии зависящих от часового пояса спецификаторов %, будет использован пояс, заданный в log_timezone.) Поддерживаемые спецификаторы % похожи на те, что перечислены в описании strftime спецификации Open Group. Обратите внимание, что системная функция strftime напрямую не используется. Поэтому нестандартные, специфичные для платформы особенности не будут работать. Значение по умолчанию postgresql-%Y-%m-%d_%H%M%S.log.

Если для задания имени файлов не используются спецификаторы %, то для избежания переполнения диска, следует использовать утилиты для ротации журнальных файлов. В версиях до 8.4, при отсутствии спецификаторов %, PostgreSQL автоматически добавлял время в формате Epoch к имени файла. Сейчас в этом больше нет необходимости.

Если в log_destination включён вывод в формате CSV, то к имени журнального файла будет добавлено расширение .csv. (Если log_filename заканчивается на .log, то это расширение заменится на .csv.)

Задать этот параметр можно только в postgresql.conf или в командной строке при запуске сервера.

log_file_mode (integer)

В системах Unix задаёт права доступа к журнальным файлам, при включённом logging_collector. (В Windows этот параметр игнорируется.) Значение параметра должно быть числовым, в формате команд chmod и umask. (Для восьмеричного формата, требуется задать лидирующий 0 (ноль).)

Права доступа по умолчанию 0600, т. е. только владелец сервера может читать и писать в журнальные файлы. Также, может быть полезным значение 0640, разрешающее чтение файлов членам группы. Однако, чтобы установить такое значение, нужно каталог для хранения журнальных файлов (log_directory) вынести за пределы каталога данных кластера. В любом случае, нежелательно открывать для всех доступ на чтение журнальных файлов, так как они могут содержать конфиденциальные данные.

Задать этот параметр можно только в postgresql.conf или в командной строке при запуске сервера.

log_rotation_age (integer)

Определяет максимальное время жизни отдельного журнального файла, при включённом logging_collector. После того как прошло заданное количество минут, создаётся новый журнальный файл. Для запрета создания нового файла по прошествии определённого времени, нужно установить значение 0. Параметр можно задать только в конфигурационных файлах или в командной строке при запуске сервера.

log_rotation_size (integer)

Определяет максимальный размер отдельного журнального файла, при включённом logging_collector. После того как заданное количество килобайт записано в текущий файл, создаётся новый журнальный файл. Для запрета создания нового файла при превышении определённого размера, нужно установить значение 0. Задать этот параметр можно только в postgresql.conf или в командной строке при запуске сервера.

log_truncate_on_rotation (boolean)

Если параметр logging_collector включён, PostgreSQL будет перезаписывать существующие журнальные файлы, а не дописывать в них. Однако, перезапись при переключении на новый файл возможна только в результате ротации по времени, но не при старте сервера или ротации по размеру файла. При выключенном параметре всегда продолжается запись в существующий файл. Например, включение этого параметра в комбинации с log_filename равным postgresql-%H.log, приведёт к генерации 24-х часовых журнальных файлов, которые циклически перезаписываются. Параметр можно задать только в конфигурационных файлах или в командной строке при запуске сервера.

Пример: для хранения журнальных файлов в течение 7 дней, по одному файлу на каждый день с именами вида server_log.Mon, server_log.Tue и т. д., а также с автоматической перезаписью файлов прошлой недели, нужно установить log_filename в server_log.%a, log_truncate_on_rotation в on и log_rotation_age в 1440.

Пример: для хранения журнальных файлов в течение 24 часов, по одному файлу на час, с дополнительной возможностью переключения файла при превышения 1ГБ, установите log_filename в server_log.%H%M, log_truncate_on_rotation в on, log_rotation_age в 60 и log_rotation_size в 1000000. Добавление %M в log_filename позволит при переключении по размеру указать другое имя файла в пределах одного часа.

syslog_facility (enum)

При включённом протоколировании в syslog, этот параметр определяет значение «facility». Допустимые значения LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7. По умолчанию используется LOCAL0. Подробнее в документации на системный демон syslog. Параметр можно задать только в конфигурационных файлах или в командной строке при запуске сервера.

syslog_ident (string)

При включённом протоколировании в syslog, этот параметр задаёт имя программы, которое будет использоваться в syslog для идентификации сообщений относящихся к PostgreSQL. По умолчанию используется postgres. Задать этот параметр можно только в postgresql.conf или в командной строке при запуске сервера.

event_source (string)

При включённом протоколировании в event log, этот параметр задаёт имя программы, которое будет использоваться в журнале событий для идентификации сообщений относящихся к PostgreSQL. По умолчанию используется PostgreSQL. Параметр можно задать только в конфигурационных файлах или в командной строке при запуске сервера.

Настройка Qt Creator для разработки под андроид: быстрый старт под Windows

Записки для себя, но вдруг кому будет полезно: есть многочисленные интернетные гайды, но они все — неизвестного времени, а многое — поменялось….

Загорелось мне тут сделать программу одну для телефона, чисто для себя. Ну, понятно, Qt+QML, потому что Qt я знаю, QML видел издалека, ничего сложного не запланировано. Как и всегда, главный вопрос «как начать» (т.е. настроить все, чтобы оно работало, компилировало, загружало в телефон/эмулятор), я на него потратил минимум полдня и пришел в результате к такому рецепту на 15 минут (ну может на час — на моем домашнем интернете все качалось стремительно, но не у всех оно будет так):

I. Установка Android Studio

Этот этап, совершенно точно, необязателен, но тогда вам придется качать все эти SDK/NDK/JRE вручную,  а Android Studio умеет делать все это сама.

  • Качаем Android Studio, запускаем инсталлятор, инсталлируем в C:\Android\Studio (вместо Program Files, удобнее все держать в одной куче).
  • Запускаем, выбираем «Import an Android code sample», выбираем любой пример (наверное, из Getting Started), я брал Media Effects
  • Menu — Tools — SDK Manager:
    • Меняем путь к SDK c %HOME%/AppData/Local… на C:\Android\SDK (поверьте, так будет лучше!)
    • Оно спросит скачать ли базовые штуки (Android Platform 28), соглашаемся, ждем пока скачает.
    • Закрываем SDK Manager, Menu — Build — Build Project
      • Оно начнет его билдить и в процессе будет спрашивать «не хватает детали, докачать»
      • На все такие вопросы (в виде гиперлинка ‘Download то-то’) отвечаем «да» путем нажатия на гиперлинк
      • При быстром интернете, минут через 5-10 у вас будет первое собраное приложение.
  • Когда первое приложение собралось (все детали докачаны): Menu — Run — Run application
    • Откроется  список устройств (подключенных и эмуляторов), он будет пуст скорее всего (и студия захочет всякого поскачивать)
    • Create New Device — Выбираем из списка какой-нибудь телефон — Next
    • На следующей странице — System Image — выбираем какую-нибудь версию андроида из предложенных — Download, когда скачалось — выбираем его же, еще пара кнопок — эмулятор
      Архитектура эмулятора — x86, не ARM. ARM-овский эмулятор чудовищно медленно работает.
    • Закрываем создатель устройств, выбираем созданное из списка, запускаемся на нем.
    • В первый раз оно загружается долго, ждем, ждем, ждем, на эмуляторе запустилось наше приложение, треть дела сделана.
  • Теперь нужно скачать NDK, он нужен Qt Creator.
    Menu — Tools — SDK Manager, закладка SDK Tools, ставим галочку на NDK:

    Жмем Apply и оно его качает.

  • На этой ноте (при повторном исполнении, все, со всеми скачиваниями, занимает минут 20) закрываем Android Studio (ну можно еще подключить живой телефон, разрешить на нем Debug Mode и собранное в процессе скачивания всего приложение — запустить там).
  • Идем в %HOME%/AppData/Local и стираем папку Android (туда студия качала начальные SDK, но мы поменяли папку с SDK на C:\Android\SDK и в AppData остались ошметки, они более не нужны).

II. Установка Qt

Qt я всегда ставил/собирал из исходников, но тут — не тот случай, потому что Qt нам нужно много и собирать упаришься. Берем инсталлятор (я взял  оффлайновый из, в данном случае, http://download.qt.io/official_releases/qt/5.12/5.12.2/), но онлайновый тоже подошел бы, качаем эти 3.7 гигабайта, запускаем, пропускаем страницу с Qt login, выбираем целевой каталог (умолчание — OK) и переходим к экрану выбора компонентов. Нужно отметить вот такие галочки:

Поясняю выбор:

  • MSVC 2017: на случай, если мы захотим поотлаживаться в MSVC (ниже объясню почему захотим).
    Предполагается, конечно, что MSVC 2017 у вас установлен (если нет — по идее, Community Edition вполне ОК, хотя я и не пробовал)
  • MinGW в списке сборок Qt и в списке Developer/Designer tools: на случай, если мы захотим отлаживать C++ в Qt Creator (из Qt Creator можно компилировать и MSVC, но нельзя отлаживаться)
  • Android x86: для запуска бинарников в эмуляторе. Потому что эмуляторы Android/x86 быстрые, а Android/ARM — медленные
  • Android ARMv7: для запуска бинарников на телефоне.
  • Для C++/Windows — лично мне достаточно 64 бит чтобы поиграться (а установленное таким образом Qt — с боевым Qt от сборки FRV/итп — никак не пересекается).

(поясню на всякий случай: Java-бинарники андроида, которые делает Android Studio — они, конечно, аппаратно-независимы. А вот C++ (то есть Qt) — собирается отдельно под каждую платформу).

Жмем Next, ставимся, в конце оно запустит Qt Creator.

Можно выбрать какой-то проект из C:\Qt\Qt5.12.2\Examples, выбрать для него виндовую платформу (MSVC или MinGW, по вкусу, убедиться что под винду у вас собирается и запускается все (если нет, то я ХЗ, обычно оно работает :).

Важно:

  • Текущий Android NDK — это clang toolchain
  • Текущий Qt (5.12.2 на момент написания этого текста) — в NDK ждет clang toolchain
  • Более старые Qt (я пробовал 5.6) — ожидают в NDK  gcc toolchain и все ломается.
  • Понятно что если вы все умеете (в Qt Creator, qmake и так далее) — вы даже и это почините, но лучше просто брать все свежее (т.е. одного примерно возраста)

III. Настройка Qt Creator для андроида

Это место, на котором я при старте потерял больше всего времени. JDK всякие качал и ставил, NDK распаковывал вручную и прочая, пока не пришел к такому вот рецепту.

Qt Creator — Tools — Options — Devices:

  • JDK location: вам достаточно того, что с собой принесла Android Studio.
    Более того, попытки поставить сравнительно свежий JDK и скормить его Qt Creator — не работают (JDK8 работает, более новые — хрен).
  • SDK location — понятно
  • NDK location — Android Studio скачала его для вас
  • Можно ткнуть в SDK Manager и скачать (или удалить) какую-то версию, на удивление это место работает.
  • Можно ткнуть в AVD Manager и сделать еще какой-нибудь эмулятор, но у Android Studio это место работает понятнее.
  • Собственно, все, все должно работать. Проверяем
    • Открываем какой-нибудь проект из C:\Qt\Qt5.12.2\Examples\Qt-5.12.2\quick\
    • Нам предложат все 4 варианта рантайм/архитектура, которые мы установили с Qt, соглашаемся, Configure Project
    • Идем в закладку Projects, выбираем Android for x86, ждем пока иконки Debug/Build/Run обретут цвет.
    • Нажимаем Run
    • Выбираем эмулятор из тех, что сконфигурировали андроид-студией на шаге I
    • Ждем примерно 30-50 секунд, пока проект скомпилируется (сборка/деплой apk из под Qt Creator не сильно стремительные)
    • И, да, оно запустится в эмуляторе. Реально всякий раз удивляюсь.
  • Важно: чтобы Qt Creator воспринимал эмулятор нормально, нужно на этом эмуляторе что-то разок запустить из Android Studio. Без этого «API Level: -1» и оно считается несовместимым.

IV Вместо заключения

Разрабатывать C++ + QML мне понравилось.

Я уверен, что есть всякие ограничения и недостатки, как и у любой мультиплатформенной конструкции, но опыт с Qt говорит мне, что самые тяжелые проблемы таки как-то решены 🙂 /впрочем, в QML мне сильно не хватает #ifdef /, просто я еще на них не натыкался, у меня и так все выходит /как-то/.

Есть огромный, просто гигантский (особенно на стадии обучения) плюс в том, что оно (Qt+QML) умеет работать Native на Windows:  edit — build — run для небольшого проекта занимает буквально секунду (1-3 если быть точным) на моем железе, тогда как  Android studio делает это секунд за 15 (попробовал) для Java-приложения, а изготовление Qt+QML  apk-файла занимает как бы не секунд 40 (и apk-шка большая, едет даже на эмулятор не мгновенно).

Поэтому minor edit — run — гораздо (собственно на 1-2 порядка) быстрее для native приложения, чем даже для Java+эмулятор, не говоря о Qt+QML+эмулятор (или native девайс). Понятно что мультитач в native-приложении толком не потестировать (пишу не пробовав, в принципе то у меня есть MS Surface с тач-экраном и надо будет проверить).

Кроме этого, еще замечания:

  • Редактировать QML гораздо удобнее в Qt Creator: он знает синтаксис и есть контекстная помощь по компонентам.
  • Редактировать C++ в Qt Creator мне люто не понравилось: все мигает и переливается всякими сообщениями/предупреждениями, а комплетер работает (как мне показалось) только для полностью синтаксически корректных описаний (т.е. если у меня описание класса развалено, то комплетер для членов класса работать не будет). Визуальная студия ну гораздо лучше (для меня)  как C++-редактор (ну и привычки у меня к ней больше, конечно).
  • Отладка C++ в Qt Creator  (для меня) гораздо хуже, чем в MSVC:
    • Гораздо дольше запуск, все загружаемые DLL как-то анализируются на лету и это занимает при запуске десятки секунд (запуск не под отладчиком — ок, все быстро)
    • Ну и сам отладчик (скажем, инспекция переменных) — по мне так сильно хуже.
    • Отладчик студии запускается быстро (хотя в MSVC 2013  — еще быстрее, чем в 2017) и меня полностью устраивает.
  • Отладка QML, соответственно, наоборот: я вообще не понял, есть ли она в MSVC (не разбирался), а в Qt Creator — в тех объемах что мне было надо — работает.

В результате я пишу QML-интерфейс и скелет C++-кода в Qt Creator, а когда гуй работает, закрываю креатор и иду писать мясо в визуальной студии. Так и живу.

P.S. Мой первый андроидный апп опубликую в github на днях 🙂

Как я собрался генерировать ERD · GitHub

#Как я собирался генерировать ERD

В общем, решил я сгенерировать ERD существующей PostgreSQL базы данных.
Добрые люди из украинского Python комьюнити порекомендовали pgmodeler. Посмотрел скриншоты на сайте — понравилось.
Решил по-быстрому его собрать и опробовать. Когда собирал, понял, что заметка с пошаговой инструкцией может оказаться полезной.
Посему излагаю.

git clone [email protected]:pgmodeler/pgmodeler.git \
	&& cd pgmodeler \
	&& git checkout v0.8.2
  • Запустил скрипт linuxdeploy.sh, он ругнулся, что у меня в Fedora 23 установлен QT 4.8.7, а нужен QT >= 5.0.0.
  • Пошел на http://www.qt.io/download-open-source/#section-2, скачал offline installer «Qt 5.7.0 for Linux 64-bit (715 MB)».
  • Запустил установщик, который спрашивал пароль суперпользователя, а после зависал.
  • В первом же поисковом запросе нашел решение — поменять пользователя на root и зайти в / перед установкой. Помогло.
  • Попробовал запустить скрипт linuxdeploy.sh еще раз. Тот снова ругнулся на версию Qt Framework.
  • Поменял в linuxdeploy.sh значение переменной FALLBACK_QT_ROOT на /opt/Qt5.7.0/5.7/gcc_64.
  • Попробовал запустить — опять ругается. Нашел еще одну переменную: QT_IFW_ROOT=/opt/qt-ifw-1.5.0.
  • Пошел устанавливать Qt Installer Framework.
cd /opt \
	&& git clone http://code.qt.io/cgit/installer-framework/installer-framework.git ./qt-ifw-2.0.3 \
	&& cd ./qt-ifw-2.0.3 \
	&& git checkout 2.0.3
  • Не стал заморачиваться с симлинками: /opt/Qt5.7.0/5.7/gcc_64/bin/qmake && make
  • Поменял в linuxdeploy.sh значение переменной QT_IFW_ROOT на /opt/qt-ifw-2.3.0
  • Запускаю linuxdeploy.sh: clang++: Command not found
  • sudo dnf install clang установил мне clang, clang-libs, llvm.
  • Запустил linuxdeploy.sh еще раз:
pgModeler Linux deployment script
PostgreSQL Database Modeler Project - pgmodeler.com.br
Copyright 2006-2016 Raphael A. Silva <[email protected]>

Deploying version: 0.8.2
Cleaning previous compilation...
Running qmake...
Compiling code...

Ноут начал обжигать ноги. Супер — сборка идёт! Ушел курить.

  • Покурив, обнаружил, что не удалось скопировать Qt плагины:
Installing dependencies...
Copying Qt core libraries...
Copying Qt plugins...

** Plugins copy failed!
  • Заглянул в лог linuxdeploy.log:
cp: cannot stat ‘/opt/Qt5.7.0/5.7/gcc_64/plugins/imageformats/libqmng.so’: No such file or directory
  • Не знаю, почему его там не оказалось.
locate libqmng.so
usr/lib64/qt4/plugins/imageformats/libqmng.so
sudo ln -s /opt/Qt5.7.0/5.7/gcc_64/plugins/imageformats/libqmng.so /usr/lib64/qt4/plugins/imageformats/libqmng.so

Авось совместима…

  • Запустил linuxdeploy.sh снова.
pgModeler Linux deployment script
PostgreSQL Database Modeler Project - pgmodeler.com.br
Copyright 2006-2016 Raphael A. Silva <[email protected]>

Deploying version: 0.8.2
Cleaning previous compilation...
Running qmake...
Compiling code...

Ногам снова горячо. Курить!

Installing dependencies...
Copying Qt core libraries...
Copying Qt plugins...
Copying scripts...
Generating tarball...
File created: dist/pgmodeler-0.8.2-linux64.tar.gz
pgModeler successfully deployed!
  • sudo cp -R pgmodeler /opt/
  • sudo ln -s /opt/pgmodeler/build/opt/pgmodeler/start-pgmodeler.sh /usr/bin/pgmodeler

Профит.

«Не удалось загрузить плагин платформы« xcb »» при запуске приложения qt5 в Linux без установленной qt

Для тех, кто все еще застрял после того, как попробовал любой другой вариант в Интернете, вы можете найти точный путь, по которому этот пресловутый libqxcb.so поиск ищется, для открытия / загрузки Qtприложением ( VirtualBox-5.2.8это Qtприложение в моем случае), используя Трассирование инструмент. В моем случае, так как я строил VirtualBox-5.2.8из его источника, он искал libqxcb.soв расположении ниже:
"...VirtualBox-5.2.8/out/linux.amd64/release/bin/platforms/"
а не в defaultпутях библиотеки, пути Qtустановки и т. Д. Итак, ни одна из lddпроверок и другие решения не работали. Кроме того, установка QT_DEBUG_PLUGINS=1не принесла никаких дополнительных журналов.

Запуск strace в бинарном файле VirtualBox, который я создал с использованием Clang / LLVM в Ubuntu 17.10 x86_64:

...VirtualBox-5.2.8$ strace ./out/linux.amd64/release/bin/VirtualBox

.
.
.
access(".../VirtualBox-5.2.8/out/linux.amd64/release/bin/platforms/.", F_OK) = -1 ENOENT (No such file or directory)
write(2, "Qt FATAL: ", 10Qt FATAL: )              = 10
write(2, "This application failed to start"..., 154This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".

Reinstalling the application may fix this problem.) = 154
.
.
.

Это был мой hitting-the-nail-on-its-headмомент, и я создал symlinkиз установленного Qt5.10.1«s platformsдиректории указанной ниже:
"...Qt5.10.1/Tools/QtCreator/lib/Qt/plugins/platforms/"на искомый путь , который "...VirtualBox-5.2.8/out/linux.amd64/release/bin/". Таким образом, VirtualBox-5.2.8собран из исходного кода на Linux ( Ubuntu 17.10 x86_64) с использованием Clang/LLVM, наконец, успешно запущен !

На самом деле, еще одна интересная вещь здесь является то, что я построил , VirtualBox-5.2.8полностью используя Clang/Clang++/LLVMна Ubuntu 17.10 x86_64после значительного усилия — для FreeBSD, уже есть порт для строительства с VirtualBoxиспользованием , clangно и для Linux, это сильно зависит от , GCCкак я увидел , и , следовательно , потребовалось много усилий , чтобы получить к этому моменту, чтобы иметь возможность успешно строить VirtualBox-5.2.8из его источника с помощью Clang/Clang++/LLVMon Ubuntu 17.10 x86_64for target Linux/AMD64( Ubuntu 17.10 x86_64) и успешно запускать его после решения других проблем наряду с этим пресловутым libqxcb.so.

Приветствия.

Настройки базы данных | GitLab

GitLab поддерживает только систему управления базами данных PostgreSQL.

Таким образом, у вас есть два варианта использования серверов баз данных с Omnibus GitLab:

  • Используйте упакованный сервер PostgreSQL, включенный в Omnibus GitLab (нет
    требуется конфигурация, рекомендуется).
  • Используйте внешний сервер PostgreSQL.

Использование службы базы данных PostgreSQL, поставляемой с Omnibus GitLab

Перенастройка и перезапуск PostgreSQL

Омнибус обычно перезапускает любую службу при перенастройке, если настройки конфигурации для этой службы были
изменено в gitlab.rb файл. PostgreSQL уникален тем, что некоторые его настройки вступят в силу
с перезагрузкой (HUP), в то время как другие требуют перезапуска PostgreSQL. Потому что администраторы
часто требуется больше контроля над тем, когда именно перезапускается PostgreSQL, Omnibus настроен
чтобы выполнить перезагрузку PostgreSQL при перенастройке, а не перезапуск. Это означает, что если вы измените какой-либо
Параметр PostgreSQL, требующий перезапуска, вам нужно будет перезапустить PostgreSQL вручную после того, как вы
перенастроить.

Шаблон конфигурации GitLab
определяет, какие настройки PostgreSQL требуют перезапуска, а какие — только перезагрузки.Вы также можете
запустите запрос к своей базе данных, чтобы определить, требует ли какой-либо отдельный параметр перезагрузки. Начать
консоль базы данных с помощью sudo gitlab-psql , затем замените <имя параметра> в следующем запросе
с изменяемой настройкой:

  ВЫБРАТЬ имя, настройка FROM pg_settings WHERE context = 'postmaster' AND name = '<имя настройки>';
  

Если для изменения параметра потребуется перезапуск, запрос вернет имя параметра и текущее значение.
этого параметра в запущенном экземпляре PostgreSQL.

Настройка SSL

Omnibus автоматически включает SSL на сервере PostgreSQL, но принимает
по умолчанию как зашифрованные, так и незашифрованные соединения. Для принудительного использования SSL требуется
используя конфигурацию hostssl в pg_hba.conf . Подробнее см.
pg_hba.conf документация.

Поддержка SSL зависит от следующих файлов:

  • Публичный SSL-сертификат для базы данных ( server.crt ).
  • Соответствующий закрытый ключ для сертификата SSL ( server.ключ ).
  • Комплект корневых сертификатов, который проверяет сертификат сервера ( root.crt ).
    По умолчанию Omnibus GitLab использует встроенный пакет сертификатов в
    /opt/gitlab/embedded/ssl/certs/cacert.pem . Это не требуется для
    самоподписанные сертификаты.

10-летний самозаверяющий сертификат и закрытый ключ будут сгенерированы Omnibus GitLab для использования. Если бы ты
предпочитаете использовать сертификат, подписанный ЦС, или замените его своим собственным самозаверяющим сертификатом, выполните следующие действия.

Обратите внимание, что расположение этих файлов можно настраивать, но закрытый ключ
должен быть доступен для чтения пользователю gitlab-psql . Омнибус управляет разрешениями
файлы для вас, но если пути настроены, вы должны убедиться, что
gitlab-psql может получить доступ к каталогу, в котором находятся файлы.

Дополнительные сведения см. В документации PostgreSQL.

Обратите внимание, что server.crt и server.key могут отличаться от SSL по умолчанию
сертификаты, используемые для доступа к GitLab.Например, предположим, что внешнее имя хоста
вашей базы данных — database.example.com , а ваше внешнее имя хоста GitLab
это gitlab.example.com . Вам понадобится либо подстановочный сертификат для
* .example.com или два разных SSL-сертификата.

После того, как у вас будут эти файлы, включите SSL:

  1. Изменить /etc/gitlab/gitlab.rb :

      postgresql ['ssl_cert_file'] = '/custom/path/to/server.crt'
    postgresql ['ssl_key_file'] = '/ custom / путь / к / серверу.ключ'
    postgresql ['ssl_ca_file'] = '/custom/path/to/bundle.pem'
    postgresql ['internal_certificate'] = "----- НАЧАТЬ СЕРТИФИКАТ -----
    ... сертификат в кодировке base64 ...
    ----- КОНЕЦ СЕРТИФИКАТА -----
    "
    postgresql ['internal_key'] = "----- НАЧАТЬ ЧАСТНЫЙ КЛЮЧ RSA -----
    ... закрытый ключ в кодировке base64 ...
    ----- КОНЕЦ ЧАСТНОГО КЛЮЧА RSA -----
    "
      

    Относительные пути будут основаны на каталоге данных PostgreSQL
    (По умолчанию / var / opt / gitlab / postgresql / data ).

  2. Перенастройте GitLab, чтобы применить изменения конфигурации.

  3. Перезапустите PostgreSQL, чтобы изменения вступили в силу:

      gitlab-ctl перезапустить postgresql
      

    Если PostgreSQL не запускается, проверьте журналы (например,
    / var / log / gitlab / postgresql / current ) для получения дополнительных сведений.

Требовать SSL
  1. Добавьте следующее в /etc/gitlab/gitlab.rb :

      postgresql ['db_sslmode'] = 'требуется'
      
  2. Перенастройте GitLab, чтобы применить изменения конфигурации.

  3. Перезапустите PostgreSQL, чтобы изменения вступили в силу:

      gitlab-ctl перезапустить postgresql
      

    Если PostgreSQL не запускается, проверьте журналы (например,
    / var / log / gitlab / postgresql / current ) для получения дополнительных сведений.

Отключение SSL
  1. Добавьте следующее в /etc/gitlab/gitlab.rb :

      postgresql ['ssl'] = 'выкл.'
      
  2. Перенастройте GitLab, чтобы применить изменения конфигурации.

  3. Перезапустите PostgreSQL, чтобы изменения вступили в силу:

      gitlab-ctl перезапустить postgresql
      

    Если PostgreSQL не запускается, проверьте журналы (например,
    / var / log / gitlab / postgresql / current ) для получения дополнительных сведений.

Проверка использования SSL

Чтобы определить, используется ли SSL клиентами, вы можете запустить:

При запуске вы должны увидеть следующий баннер:

  psql (9.6.5)
SSL-соединение (протокол: TLSv1.2, шифр: ECDHE-RSA-AES256-GCM-SHA384, бит: 256, сжатие: включено)
Введите "help" для получения справки.
  

Чтобы определить, используют ли клиенты SSL, выполните следующий запрос SQL:

  ВЫБРАТЬ * ИЗ pg_stat_ssl;
  

Например:

  gitlabhq_production => выберите * из pg_stat_ssl;
 pid | ssl | версия | шифр | биты | сжатие | clientdn
------ + ----- + --------- + ------------------------ + - ---- + ------------- + ------------
  384 | f | | | | |
  386 | f | | | | |
  998 | т | TLSv1.3 | TLS_AES_256_GCM_SHA384 | 256 | f | / CN = gitlab
  933 | f | | | | |
 1003 | т | TLSv1.3 | TLS_AES_256_GCM_SHA384 | 256 | f | / CN = gitlab
 1016 | т | TLSv1.3 | TLS_AES_256_GCM_SHA384 | 256 | f | / CN = gitlab
 1022 | т | TLSv1.3 | TLS_AES_256_GCM_SHA384 | 256 | f | / CN = gitlab
 1211 | т | TLSv1.3 | TLS_AES_256_GCM_SHA384 | 256 | f | / CN = gitlab
 1214 | т | TLSv1.3 | TLS_AES_256_GCM_SHA384 | 256 | f | / CN = gitlab
 1213 | т | TLSv1.3 | TLS_AES_256_GCM_SHA384 | 256 | f | / CN = gitlab
 1215 | т | TLSv1.3 | TLS_AES_256_GCM_SHA384 | 256 | f | / CN = gitlab
 1252 | т | TLSv1.3 | TLS_AES_256_GCM_SHA384 | 256 | f |
 1280 | т | TLSv1.3 | TLS_AES_256_GCM_SHA384 | 256 | f | / CN = gitlab
  382 | f | | | | |
  381 | f | | | | |
  383 | f | | | | |
(16 рядов)
  
  1. Строки, в которых t указаны в столбце ssl , включены.
  2. Строки, которые имеют значение в clientDN , используют метод аутентификации cert
Настройка аутентификации клиента SSL

Клиентские SSL-сертификаты могут использоваться для аутентификации на сервере базы данных. Создание сертификатов
выходит за рамки omnibus-gitlab . Но пользователи, у которых есть существующее решение для управления сертификатами SSL
можно использовать это.

Настроить сервер базы данных
  1. Создайте сертификат и ключ для сервера, общее имя должно совпадать с DNS-именем сервера
  2. Скопируйте сертификат сервера, ключ и файл CA на сервер PostgreSQL и убедитесь в правильности разрешений.
    1. Сертификат должен принадлежать пользователю базы данных (по умолчанию: gitlab-psql )
    2. Ключевой файл должен принадлежать пользователю базы данных, а его права доступа должны быть 0400
    3. Файл CA должен принадлежать пользователю базы данных, а его права доступа должны быть 0400

    Примечание. Не используйте имена файлов server.crt или server.key для этих файлов. Эти
    имена файлов зарезервированы для внутреннего использования omnibus-gitlab .

  3. Убедитесь, что в gitlab.rb установлено следующее:

      postgresql ['ssl_cert_file'] = 'PATH_TO_CERTIFICATE'
    postgresql ['ssl_key_file'] = 'PATH_TO_KEY_FILE'
    postgresql ['ssl_ca_file'] = 'PATH_TO_CA_FILE'
    postgresql ['listen_address'] = 'IP_АДРЕС'
    postgresql ['cert_auth_addresses'] = {
    'IP_ADDRESS' => {
      'database' => 'gitlabhq_production',
      'пользователь' => 'gitlab'
    }
      

    Установите listen_address как IP-адрес сервера, который будут использовать клиенты.
    для подключения к базе данных.Убедитесь, что cert_auth_addresses содержит список IP-адресов, а
    базы данных и пользователей, которым разрешено подключаться к базе данных. Ты можешь использовать
    Обозначение CIDR при указании ключа для cert_auth_addresses от до
    включить диапазон IP-адресов.

  4. Запустите gitlab-ctl, перенастройте , а затем gitlab-ctl перезапустите postgresql для
    новые настройки вступят в силу.
Настройка клиента Rails

Чтобы клиент rails мог подключиться к серверу, вам понадобится сертификат и ключ с commonName , установленным на gitlab , который подписан центром сертификации, которому доверяет файл CA, указанный в ssl_ca_file на сервере сервер базы данных.

  1. Настроить gitlab.rb

      gitlab_rails ['db_host'] = 'IP_ADDRESS_OR_HOSTNAME_OF_DATABASE_SERVER'
    gitlab_rails ['db_sslcert'] = 'PATH_TO_CERTIFICATE_FILE'
    gitlab_rails ['db_sslkey'] = 'PATH_TO_KEY_FILE'
    gitlab_rails ['db_rootcert'] = 'PATH_TO_CA_FILE'
      
  2. Запустите gitlab-ctl перенастройте , чтобы клиент rails использовал новые настройки
  3. Выполните действия, описанные в разделе «Проверка использования SSL», чтобы убедиться, что проверка подлинности работает.

Настроить упакованный сервер PostgreSQL для прослушивания TCP / IP

Упакованный сервер PostgreSQL можно настроить для прослушивания TCP / IP-соединений,
с оговоркой, что некоторые некритические сценарии ожидают сокетов UNIX и могут работать некорректно.

Чтобы настроить использование TCP / IP для службы базы данных, внесите изменения в оба
разделы postgresql и gitlab_rails из gitlab.rb .

Настроить блок PostgreSQL

В блоке postgresql затрагиваются следующие настройки:

  • listen_address : Управляет адресом, на котором PostgreSQL будет слушать.
  • порт : контролирует порт, на котором PostgreSQL будет прослушивать, и должен быть установлен как
    если listen_address — это.
  • md5_auth_cidr_addresses : список блоков адресов CIDR, которым разрешено
    подключиться к серверу после аутентификации с паролем.
  • trust_auth_cidr_addresses : список разрешенных блоков адресов CIDR.
    для подключения к серверу без какой-либо аутентификации. Будьте очень осторожны
    с этой настройкой.
    Предлагается ограничиться петлей
    адрес 127.0.0.1/24 или даже 127.0.0.1/32 .
  • sql_user : Управляет ожидаемым именем пользователя для аутентификации MD5. Этот
    по умолчанию — gitlab и не является обязательной настройкой.
  • sql_user_password : устанавливает пароль, который PostgreSQL примет для MD5
    аутентификация. Замените securesqlpassword в следующем примере на
    приемлемый пароль.
  postgresql ['listen_address'] = '0.0.0.0'
postgresql ['порт'] = 5432
postgresql ['md5_auth_cidr_addresses'] =% w ()
postgresql ['trust_auth_cidr_addresses'] =% w (127.0.0.1/24)
postgresql ['sql_user'] = "gitlab"

##! SQL_USER_PASSWORD_HASH может быть сгенерирован с помощью команды `gitlab-ctl pg-password-md5 gitlab`,
##! где `gitlab` - это имя пользователя SQL, который подключается к GitLab.
postgresql ['sql_user_password'] = "SQL_USER_PASSWORD_HASH"

# принудительно использовать ssl для всех подключений, определенных в trust_auth_cidr_addresses и md5_auth_cidr_addresses
postgresql ['hostssl'] = правда
  

Любому клиенту или сервису GitLab, который будет подключаться по сети, потребуется
укажите значения sql_user для имени пользователя и пароля, предоставленные для
конфигурация при подключении к серверу PostgreSQL.Они также должны быть в
сетевой блок предоставляется на md5_auth_cidr_addresses

Настроить блок GitLab Rails

Чтобы настроить приложение gitlab-rails для подключения к базе данных PostgreSQL
по сети необходимо настроить несколько параметров:

  • db_host : необходимо указать IP-адрес сервера базы данных. Если это
    в том же экземпляре, что и служба PostgreSQL, это может быть 127.0.0.1 и будет
    не требует аутентификации по паролю
    .
  • db_port : Устанавливает порт на сервере PostgreSQL для подключения, а должен быть установлен как
    если установлен db_host .
  • db_username : настраивает имя пользователя для подключения к PostgreSQL. Этот
    по умолчанию gitlab .
  • db_password : необходимо указать при подключении к PostgreSQL через TCP / IP и из
    экземпляр в блоке postgresql ['md5_auth_cidr_addresses'] из настроек
    выше.Это не требуется, если вы подключаетесь к 127.0.0.1 и настроили
    postgresql ['trust_auth_cidr_addresses'] , чтобы включить его.
  gitlab_rails ['db_host'] = '127.0.0.1'
gitlab_rails ['db_port'] = 5432
gitlab_rails ['db_username'] = "gitlab"
gitlab_rails ['db_password'] = "securesqlpassword"
  
Применить и перезапустить службы

После внесения предыдущих изменений администратор должен запустить gitlab-ctl reconfigure .Если у вас возникли проблемы с сервисом, который не слушает TCP, попробуйте
прямой перезапуск службы с помощью gitlab-ctl restart postgresql .

Некоторые сценарии, включенные в пакет Omnibus (например, gitlab-psql ), ожидают
подключения к PostgreSQL должны обрабатываться через сокет UNIX и могут не работать
должным образом. Вы можете включить TCP / IP, не отключая сокеты UNIX.

Включение архивирования PostgreSQL WAL (опережающая запись)

По умолчанию WAL-архивирование упакованного PostgreSQL не включено.Рассмотрим
следующее при попытке включить архивирование WAL:

  • Уровень WAL должен быть «репликой» или выше (варианты 9.6+: минимум ,
    реплика , или логическая )
  • Увеличение уровня WAL увеличит объем хранилища, потребляемого в
    регулярные операции

Чтобы включить архивирование WAL:

  1. Изменить /etc/gitlab/gitlab.rb :

      # Настройки репликации
    postgresql ['sql_replication_user'] = "gitlab_replicator"
    postgresql ['wal_level'] = "реплика"
        ...
        ...
    # Настройки резервного копирования / архивирования
    postgresql ['archive_mode'] = "включено"
    postgresql ['archive_command'] = "/ ваш / wal / архиватор / здесь"
    postgresql ['archive_timeout'] = "60"
      
  2. Перенастройте GitLab, чтобы изменения вступили в силу. Это приведет к перезапуску базы данных.

Хранить данные PostgreSQL в другом каталоге

По умолчанию все хранится в / var / opt / gitlab / postgresql , управляемом
атрибутом postgresql ['dir'] .

Состоит из:

  • Сокет базы данных будет /var/opt/gitlab/postgresql/.s.PGSQL.5432 . Этот
    контролируется postgresql ['unix_socket_directory'] .
  • Системный пользователь gitlab-psql будет иметь его каталог HOME , установленный на это. Этот
    контролируется postgresql ['home'] .
  • Фактические данные будут храниться в / var / opt / gitlab / postgresql / data .

Чтобы изменить расположение данных PostgreSQL

Внимание: если у вас есть база данных, вам необходимо переместить данные в новое место.
первый.

Осторожно: Это интрузивная операция. Это невозможно без простоев на
существующая установка

  1. Если это существующая установка, остановите GitLab: gitlab-ctl stop .
  2. Обновите postgresql ['dir'] в нужное место.
  3. Запустить gitlab-ctl перенастроить .
  4. Запустить GitLab gitlab-ctl start .

Обновить пакетный сервер PostgreSQL

Omnibus GitLab предоставляет команду gitlab-ctl pg-upgrade для обновления
упакованный сервер PostgreSQL до более поздней версии (если он включен в
упаковка).Это обновляет PostgreSQL до поставляемой по умолчанию версии.
во время обновления пакета, если специально не отключено.

Внимание! Перед обновлением важно полностью прочитать этот раздел, прежде чем запускать какие-либо команды. Для
установки с одним узлом, это обновление требует простоя, так как база данных должна быть
вниз, пока выполняется обновление. Продолжительность времени зависит от
размер вашей базы данных. Чтобы избежать простоев, можно перейти на новую
база данных с использованием Slony.

Чтобы обновить версию PostgreSQL, убедитесь, что:

После того, как вы подтвердите, что приведенный выше контрольный список удовлетворен, вы можете продолжить
обновление:

  sudo gitlab-ctl pg-upgrade
  

примечание pg-upgrade может принимать аргументы; например, вы можете установить тайм-аут для
выполнение базовых команд ( --timeout = 1d2h4m4s5ms ).Запустите gitlab-ctl pg-upgrade -h
чтобы увидеть полный список.

gitlab-ctl pg-upgrade выполняет следующие шаги:

  1. Проверяет заведомо исправное состояние базы данных.
  2. Проверяет, достаточно ли свободного места на диске, в противном случае прерывается. Вы можете пропустить это, добавив флаг --skip-disk-check .
  3. Завершает работу существующей базы данных, всех ненужных служб и включает страницу развертывания GitLab.
  4. Изменяет символические ссылки в / opt / gitlab / embedded / bin / для PostgreSQL, чтобы они указывали на более новую версию базы данных.
  5. Создает новый каталог, содержащий новую пустую базу данных с локалью, соответствующей существующей базе данных.
  6. Использует инструмент pg_upgrade для копирования данных из старой базы данных в новую.
  7. Удаляет старую базу данных.
  8. Перемещает новую базу данных в ожидаемое место.
  9. Вызывает sudo gitlab-ctl перенастроить для внесения необходимых изменений конфигурации и запускает новый сервер базы данных.
  10. Запускает ANALYZE для создания статистики базы данных.
  11. Запускает остальные службы и удаляет страницу развертывания.
  12. Если во время этого процесса обнаруживаются какие-либо ошибки, он возвращается к старой версии базы данных.

После завершения обновления убедитесь, что все работает должным образом.

Если во время выполнения шага ANALYZE на выходе была ошибка, ваше обновление
по-прежнему будет работать, но будет иметь низкую производительность базы данных до тех пор, пока
статистика базы данных генерируется. Используйте gitlab-psql , чтобы определить, следует ли запускать ANALYZE вручную:

  sudo gitlab-psql -c "ВЫБРАТЬ relname, last_analyze, last_autoanalyze FROM pg_stat_user_tables WHERE last_analyze IS NULL И last_autoanalyze IS NULL;"
  

Вы можете запустить ANALYZE вручную, если приведенный выше запрос вернул какие-либо строки:

  sudo gitlab-psql -c 'SET statement_timeout = 0; ANALYZE VERBOSE; '
  

После того, как вы убедились, что ваш экземпляр GitLab работает правильно , вы
может очистить старые файлы базы данных:

  sudo rm -rf / var / opt / gitlab / postgresql / data.<старая_версия>
sudo rm -f /var/opt/gitlab/postgresql-version.old
  

Вы можете найти подробную информацию о версиях PostgreSQL, поставляемых с различными версиями GitLab.
в версиях PostgreSQL, поставляемых с Omnibus GitLab.

Отказ от автоматического обновления PostgreSQL

Чтобы отказаться от автоматического обновления PostgreSQL во время обновления пакета GitLab, запустите:

  sudo touch / etc / gitlab / disable-postgresql-upgrade
  
GitLab 13.8 и новее

Версия PostgreSQL по умолчанию — 12.x, а обновление базы данных
выполняется автоматически при обновлении пакетов для установок, не использующих repmgr или Geo.

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

  • Вы запускаете базу данных в режиме высокой доступности с помощью repmgr или patroni.
  • Узлы вашей базы данных являются частью конфигурации GitLab Geo.
  • Вы специально отказались.

Отказоустойчивые установки и установки с географической привязкой поддерживают ручное обновление до PostgreSQL 12, см. Пакетный PostgreSQL, развернутый в кластере высокой доступности / гео.

GitLab 13.7 и новее

Начиная с GitLab 13.7, в новых установках по умолчанию используется PostgreSQL 12.

Существующие экземпляры можно обновить вручную с помощью:

  судо gitlab-ctl pg-upgrade -V 12
  

Экземпляры

с отказоустойчивым развертыванием PostgreSQL 11 необходимо будет сначала обновить до Patroni, а затем до PostgreSQL 12.

Geo-установки поддерживают ручное обновление до PostgreSQL 12, см. Пакетный PostgreSQL, развернутый в географическом кластере.

GitLab 13.3 и новее

Начиная с GitLab 13.3, PostgreSQL 11.7 и 12.3 поставляются с Omnibus.
Во время обновления пакета база данных не обновляется до PostgreSQL 12. Если вы
хотите перейти на PostgreSQL 12, вы должны сделать это вручную:

  судо gitlab-ctl pg-upgrade -V 12
  

PostgreSQL 12 не поддерживается в географических развертываниях и планируется
для будущих выпусков. Отказоустойчивое развертывание PostgreSQL 12
возможно только при использовании Patroni.Repmgr больше не поддерживается для
PostgreSQL 12.

GitLab 12.10 и новее

Версия PostgreSQL по умолчанию — 11.x, а обновление базы данных —
выполняется при обновлении пакетов для установок, которые не используют repmgr или Geo.

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

  • Вы запускаете базу данных в режиме высокой доступности с помощью repmgr.
  • Узлы вашей базы данных являются частью конфигурации GitLab Geo.
  • Вы специально отказались.

Чтобы обновить PostgreSQL при установке с HA или Geo, см. Упакованный PostgreSQL, развернутый в кластере HA / Geo.

GitLab 12.8 и новее

Начиная с GitLab 12.8, PostgreSQL 9.6.17, 10.12 и 11.7 поставляются с
Омнибус GitLab.

Во время обновления пакета (если не отключено) и когда пользователь запускает вручную
gitlab-ctl pg-upgrade , omnibus-gitlab все еще будет пытаться обновить
база данных только до 10.x, а 11.x будет доступен для пользователей, чтобы вручную
обновитесь до. Чтобы вручную обновить PostgreSQL до версии 11.x, pg-upgrade
Команда должна быть передана с аргументом версии ( -V или --target-version ):

  судо gitlab-ctl pg-upgrade -V 11
  
GitLab 12.0 и новее

Начиная с GitLab 12.0, PostgreSQL 9.6.11 и 10.7 поставляются с Омнибусом
GitLab.

При обновлении мы будем обновлять базу данных до 10.7 если специально не выбрано
out, как описано ранее.

GitLab 11.11 и новее

Начиная с GitLab 11.11, PostgreSQL 9.6.X и 10.7 поставляются с Omnibus
GitLab.

Новые установки будут получать PostgreSQL 10.7 при обновлении пакета GitLab
сохранит существующую версию PostgreSQL. Пользователи могут вручную перейти на
10.7 с помощью команды pg-upgrade , как упоминалось ранее.

Вернуть упакованный сервер PostgreSQL к предыдущей версии

Внимание: Эта операция вернет текущую базу данных, , включая ее данные , в ее состояние.
перед вашим последним обновлением.Обязательно создайте резервную копию, прежде чем пытаться перейти на более раннюю версию.
ваша упакованная база данных PostgreSQL.

В версиях GitLab, которые содержат несколько версий PostgreSQL, пользователи могут перейти на более раннюю версию.
уже обновленная версия PostgreSQL до более ранней версии с использованием gitlab-ctl
revert-pg-upgrade
команда. Эта команда также поддерживает флаг -V для указания
целевая версия для сценариев, в которых поставляется более двух версий PostgreSQL
пакет (например: GitLab 12.8, где PostgreSQL 9.6.x, 10.x и 11.x являются
отправленный).

Если целевая версия не указана, будет использоваться версия из /var/opt/gitlab/postgresql-version.old
если доступно. В противном случае он возвращается к версии по умолчанию, поставляемой с GitLab.

В других версиях GitLab, которые поставляют только одну версию PostgreSQL, вы не можете
понизьте версию PostgreSQL. Вы должны понизить GitLab до более старой версии для
это.

Подключение к прилагаемой базе данных PostgreSQL

Если вам нужно подключиться к прилагаемой базе данных PostgreSQL и вы используете
конфигурация базы данных Omnibus GitLab по умолчанию, вы можете подключиться как
пользователь приложения:

  sudo gitlab-rails dbconsole
  

или как суперпользователь PostgreSQL:

  sudo gitlab-psql -d gitlabhq_production
  

Использование неупакованного сервера управления базами данных PostgreSQL

По умолчанию GitLab настроен на использование сервера PostgreSQL, который включен
в Омнибусе GitLab.Вы также можете перенастроить его для использования внешнего экземпляра
PostgreSQL.

Внимание Если вы используете неупакованный сервер PostgreSQL, вам необходимо сделать
убедитесь, что PostgreSQL настроен в соответствии с документом о требованиях к базе данных.

  1. Изменить /etc/gitlab/gitlab.rb :

      # Отключить встроенный Postgres
    postgresql ['включить'] = ложь
    
    # Заполните данные подключения для database.yml
    gitlab_rails ['db_adapter'] = 'postgresql'
    gitlab_rails ['db_encoding'] = 'utf8'
    gitlab_rails ['db_host'] = '127.0,0.1 '
    gitlab_rails ['db_port'] = 5432
    gitlab_rails ['db_username'] = 'ИМЯ ПОЛЬЗОВАТЕЛЯ'
    gitlab_rails ['db_password'] = 'ПАРОЛЬ'
      

    Не забудьте удалить символы комментария # в начале этих
    линий.

    Обратите внимание, что:

    • /etc/gitlab/gitlab.rb должен иметь права доступа к файлу 0600 , потому что он содержит
      пароли в виде обычного текста.
    • PostgreSQL позволяет прослушивать несколько адресов

      Если вы используете несколько адресов в gitlab_rails ['db_host'] , разделенных запятыми, для подключения будет использоваться первый адрес в списке.

  2. Перенастройте GitLab, чтобы изменения вступили в силу.

  3. Заполните базу данных.

Конфигурация сокета UNIX для неупакованного PostgreSQL

Если вы хотите использовать сервер PostgreSQL вашей системы (установленный в той же системе
как GitLab) вместо того, который идет в комплекте с GitLab, вы можете сделать это, используя UNIX
разъем:

  1. Изменить /etc/gitlab/gitlab.rb :

      # Отключить встроенный Postgres
    postgresql ['включить'] = ложь
    
    # Заполните данные о подключении к базе данных.yml
    gitlab_rails ['db_adapter'] = 'postgresql'
    gitlab_rails ['db_encoding'] = 'utf8'
    # Путь, где находится сокет
    gitlab_rails ['db_host'] = '/ var / run / postgresql /'
      
  2. Перенастройте GitLab, чтобы изменения вступили в силу:

      судо gitlab-ctl-reconfigure
      

Настройка SSL

Требовать SSL
  1. Добавьте следующее в /etc/gitlab/gitlab.rb :

      postgresql ['db_sslmode'] = 'требуется'
      
  2. Перенастройте GitLab, чтобы применить изменения конфигурации.

  3. Перезапустите PostgreSQL, чтобы изменения вступили в силу:

      gitlab-ctl перезапустить postgresql
      

    Если PostgreSQL не запускается, проверьте журналы (например,
    / var / log / gitlab / postgresql / current ) для получения дополнительных сведений.

Требовать SSL и проверить сертификат сервера по пакету CA

PostgreSQL можно настроить так, чтобы он требовал SSL и проверял сертификат сервера.
против связки CA для предотвращения спуфинга.Пакет CA, указанный в gitlab_rails ['db_sslrootcert'] , должен содержать
как корневой, так и промежуточный сертификаты.

  1. Добавьте следующее в /etc/gitlab/gitlab.rb :

      gitlab_rails ['db_sslmode'] = "verify-full"
    gitlab_rails ['db_sslrootcert'] = "ваш-полный-ca-bundle.pem"
      

    Если вы используете Amazon RDS для своего сервера PostgreSQL, убедитесь, что
    скачать и использовать комбинированный пакет CA
    для gitlab_rails ['db_sslrootcert'] .Более подробную информацию об этом можно найти
    в использовании SSL / TLS для шифрования соединения с инстансом БД
    статья на AWS.

  2. Перенастройте GitLab, чтобы применить изменения конфигурации.

  3. Перезапустите PostgreSQL, чтобы изменения вступили в силу:

      gitlab-ctl перезапустить postgresql
      

    Если PostgreSQL не запускается, проверьте журналы (например,
    / var / log / gitlab / postgresql / current ) для получения дополнительных сведений.

Резервное копирование и восстановление неупакованной базы данных PostgreSQL

При использовании задачи создания и восстановления резервной копии Rake GitLab будет
попытаться использовать упакованную команду pg_dump для создания файла резервной копии базы данных
и упакованная команда psql для восстановления резервной копии.Это будет работать, только если
это правильные версии. Проверить версии упакованных pg_dump и
psql :

  / opt / gitlab / embedded / bin / pg_dump --version
/ opt / gitlab / встроенный / bin / psql --version
  

Если эти версии отличаются от вашего неупакованного внешнего PostgreSQL, вы
потребуется установить инструменты, соответствующие версии вашей базы данных, а затем следовать
шаги ниже. Есть несколько способов установить клиентские инструменты PostgreSQL. Видеть
https: // www.postgresql.org/download/ для параметров.

После того, как в вашей системе станут доступны правильные инструменты psql и pg_dump , выполните следующие действия.
эти шаги, используя правильный путь к месту, где вы установили новые инструменты:

  1. Добавьте символические ссылки на неупакованные версии:

      ln -s / путь / к / новый / pg_dump / путь / к / новый / psql / opt / gitlab / bin /
      
  2. Проверить версии:

      / opt / gitlab / bin / pg_dump --version
    / opt / gitlab / bin / psql --version
      

    Теперь они должны быть такими же, как ваш неупакованный внешний PostgreSQL.

После этого убедитесь, что задачи резервного копирования и восстановления используют
правильные исполняемые файлы, запустив как резервную копию, так и
восстановить задачи.

Обновление неупакованной базы данных PostgreSQL

Прежде чем продолжить обновление, обратите внимание на следующее:

  • Перед обновлением просмотрите таблицу совместимости версий GitLab и PostgreSQL.
    чтобы определить свой путь обновления. При использовании резервного копирования или восстановления GitLab вы
    должен сохранить ту же версию GitLab; сначала обновите PostgreSQL, а затем GitLab.
  • Задача Rake резервного копирования и восстановления
    может использоваться для резервного копирования и восстановления базы данных до более поздней версии PostgreSQL.
  • При настройке номера версии, двоичные файлы которой недоступны в файле
    system, GitLab / Rails использует двоичные файлы версии базы данных по умолчанию (по умолчанию как
    согласно таблице совместимости версий GitLab и PostgreSQL).
  • Если вы используете Amazon RDS и наблюдаете чрезвычайно высокую (почти 100%) загрузку ЦП
    загрузка после обновления основной версии (например, с 10.x в
    11.x ), выполняя ANALYZE VERBOSE; Запрос может потребоваться для повторного создания запроса
    планирует и снижает загрузку ЦП на сервере (ах) базы данных.
    Amazon рекомендует это
    как часть обновления основной версии.

В следующем примере демонстрируется обновление с хоста базы данных, на котором работает PostgreSQL 11, до другого хоста базы данных, на котором работает PostgreSQL 12, и влечет за собой простои:

  1. Создайте новый сервер базы данных PostgreSQL 12, настроенный в соответствии с требованиями базы данных.

  2. Убедитесь, что используются совместимые версии pg_dump и pg_restore .
    используется в экземпляре GitLab Rails. Чтобы изменить конфигурацию GitLab, отредактируйте
    /etc/gitlab/gitlab.rb и укажите значение postgresql ['version'] :

      postgresql ['версия'] = 12
      
  3. Перенастроить GitLab:

      sudo gitlab-ctl перенастроить
      
  4. Остановите GitLab (обратите внимание, что этот шаг приведет к простою):

  5. Запустите задачу резервного копирования Rake, используя параметры SKIP, чтобы выполнить резервное копирование только базы данных.Запишите имя файла резервной копии; вы будете использовать его позже для восстановления.

      sudo gitlab-backup create SKIP = репозитории, загрузки, сборки, артефакты, lfs, страницы, реестр
      
  6. Выключите хост базы данных PostgreSQL 11.

  7. Отредактируйте /etc/gitlab/gitlab.rb и обновите параметр gitlab_rails ['db_host']
    чтобы указать на хост базы данных PostgreSQL 11.

  8. Перенастроить GitLab:

      sudo gitlab-ctl перенастроить
      
  9. Восстановить базу данных с помощью файла резервной копии базы данных, созданного ранее, и быть
    обязательно ответьте нет на вопрос «Эта задача теперь восстановит файл authorized_keys»:

      sudo gitlab-backup restore BACKUP = 
      
  10. Запустите GitLab:

Заполните базу данных (только новые установки)

Осторожно Это деструктивная команда; не запускайте его в существующей базе данных.

Omnibus GitLab не будет заполнять вашу внешнюю базу данных. Выполните следующую команду
чтобы импортировать схему и создать первого пользователя-администратора:

  # Удалите sudo, если вы пользователь git
sudo gitlab-rake gitlab: настройка
  

Если вы хотите указать пароль для пользователя root по умолчанию, укажите
initial_root_password в /etc/gitlab/gitlab.rb перед запуском
gitlab: setup команда выше:

  gitlab_rails ['initial_root_password'] = 'нестандартный пароль'
  

Если вы хотите указать токен начальной регистрации для общих GitLab Runners,
укажите параметр initial_shared_runners_registration_token в / etc / gitlab / gitlab. руб.
перед запуском команды gitlab: setup :

  gitlab_rails ['initial_shared_runners_registration_token'] = 'токен'
  

Закрепите упакованную версию PostgreSQL (только для новых установок)

note GitLab 13.0 поставляется только с PostgreSQL 11. PostgreSQL 12 доступен только с GitLab 13.3 и новее.
PostgreSQL 12 не поддерживается при развертывании Geo и планируется
для будущих выпусков. Отказоустойчивое развертывание PostgreSQL 12
возможно только при использовании Patroni.Repmgr больше не поддерживается для PostgreSQL 12.

Omnibus GitLab инициализирует PostgreSQL с версией по умолчанию.

Чтобы инициализировать PostgreSQL с версией не по умолчанию, вы можете установить для postgresql ['version'] основную версию 1 из
упакованные версии PostgreSQL до первоначальной перенастройки.
Например, в GitLab 13.7 вы можете использовать postgresql ['version'] = 11 , чтобы использовать PostgreSQL 11 вместо PostgreSQL 12 по умолчанию.

cautionSetting postgresql ['version'] при использовании PostgreSQL в пакете Omnibus после первоначальной перенастройки будет
выдавать ошибки о том, что каталог данных инициализируется в другой версии PostgreSQL.Если это произойдет,
см. Возврат упакованного сервера PostgreSQL к предыдущей версии.

Поиск и устранение неисправностей

Установить

default_transaction_isolation в чтение зафиксировано

Если вы видите в журнале production / sidekiq ошибки, подобные приведенным ниже:

  ActiveRecord :: StatementInvalid PG :: TRSerializationFailure: ОШИБКА: не удалось сериализовать доступ из-за одновременного обновления
  

Скорее всего, конфигурация default_transaction_isolation вашей базы данных не
в соответствии с требованиями приложения GitLab.Вы можете проверить эту конфигурацию с помощью
подключиться к вашей базе данных PostgreSQL и запустить SHOW default_transaction_isolation; .
Приложение GitLab ожидает, что прочитано, зафиксировано, будет настроено.

Эта конфигурация default_transaction_isolation установлена ​​в вашем
postgresql.conf файл. Вам нужно будет перезапустить / перезагрузить базу данных, как только вы
поменял конфигурацию. Эта конфигурация по умолчанию входит в комплект поставки.
Сервер PostgreSQL включен в Omnibus GitLab.

Настройки приложения для базы данных

Отключение автоматической миграции базы данных

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

Изменить /etc/gitlab/gitlab.rb :

  # Включение или отключение автоматической миграции базы данных
gitlab_rails ['auto_migrate'] = ложь
  

Не забудьте удалить символы комментария # в начале этого
линия.

/etc/gitlab/gitlab.rb должен иметь права доступа к файлу 0600 , потому что он содержит
пароли в виде обычного текста.

При следующем запуске перенастройки шаги миграции выполняться не будут.

Настройка клиента statement_timeout

Время, в течение которого Rails будет ждать завершения транзакции базы данных.
перед тайм-аутом теперь можно настроить gitlab_rails ['db_statement_timeout']
параметр. По умолчанию этот параметр не используется.

Изменить /etc/gitlab/gitlab.rb :

  gitlab_rails ['db_statement_timeout'] = 45000
  

В этом случае клиент statement_timeout установлен на 45 секунд. Значение
указывается в миллисекундах.

Установка тайм-аута подключения

Время, в течение которого Rails будет ожидать успешной попытки соединения PostgreSQL.
перед тайм-аутом можно настроить gitlab_rails ['db_connect_timeout']
параметр.По умолчанию этот параметр не используется:

  1. Изменить /etc/gitlab/gitlab.rb :

      gitlab_rails ['db_connect_timeout'] = 5
      
  2. Перенастроить GitLab:

      sudo gitlab-ctl перенастроить
      

В этом случае для клиента connect_timeout установлено значение 5 секунд. Значение
указывается в секундах. Применяется минимальное значение 2 секунды. Установка этого значения на <= 0
или вообще не указание параметра отключает тайм-аут.

Настройка элементов управления TCP

Адаптер Rails PostgreSQL предоставляет серию элементов управления TCP-соединением.
это может быть настроено для повышения производительности. Проконсультируйтесь с
Дополнительную информацию о каждом параметре можно найти в исходной документации PostgreSQL.

Омнибус не устанавливает значений по умолчанию для этих значений, а вместо этого использует значения по умолчанию.
предоставляется адаптером PostgreSQL. Переопределите их в gitlab.rb , используя
параметры, указанные в таблице ниже, а затем запустите gitlab-ctl reconfigure .

Параметр PostgreSQL gitlab.rb параметр
сообщений поддержки активности gitlab_rails ['db_keepalives']
keepalives_idle gitlab_rails ['db_keepalives_idle']
keepalives_interval gitlab_rails ['db_keepalives_interval']
keepalives_count gitlab_rails ['db_keepalives_count']
tcp_user_timeout gitlab_rails ['db_tcp_user_timeout']

Автоматическая переиндексация базы данных

ВниманиеЭто экспериментальная функция, которая по умолчанию отключена.

Восстанавливает индексы базы данных в фоновом режиме (так называемая «переиндексация»). Это может
использоваться для удаления раздутого пространства, скопившегося в индексах, и помогает поддерживать здоровье и
эффективные индексы.

Задачу переиндексации можно запускать регулярно с помощью задания cron. Чтобы настроить cronjob,
gitlab_rails ['database_reindexing'] ['enable'] должен иметь значение true .

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

По умолчанию это запускает cronjob каждый час только в выходные дни (вероятно, время низкого трафика).

Вы можете изменить расписание, уточнив следующие параметры:

  1. Изменить /etc/gitlab/gitlab.rb :

      gitlab_rails ['database_reindexing'] ['час'] = '*'
    gitlab_rails ['database_reindexing'] ['minute'] = 0
    gitlab_rails ['database_reindexing'] ['месяц'] = '*'
    gitlab_rails ['database_reindexing'] ['day_of_month'] = '*'
    gitlab_rails ['database_reindexing'] ['day_of_week'] = '0,6'
      
  2. Перенастроить GitLab:

      sudo gitlab-ctl перенастроить
      

Пакетный PostgreSQL, развернутый в HA / Geo Cluster

Обновление кластера высокой доступности GitLab

Чтобы обновить версию PostgreSQL в кластере Patroni, см. Обновление основной версии PostgreSQL в кластере Patroni.

Обновление кластера GitLab HA Repmgr

Эти инструкции предназначены для обновления старого кластера GitLab до PostgreSQL 11 при использовании Repmgr.

Если PostgreSQL настроен на высокую доступность,
pg-upgrade следует запустить на всех узлах, на которых работает PostgreSQL. Другие узлы могут быть
пропущено, но должна быть запущена та же версия GitLab, что и узлы базы данных.

Для обновления узлов базы данных выполните следующие действия:

  1. Вторичные узлы необходимо обновить до первичного.
    1. На дополнительных узлах отредактируйте /etc/gitlab/gitlab.rb , включив в него следующее:
      # Заменить X на значение количества узлов db + 1
    postgresql ['max_replication_slots'] = X
      
    1. Запустите gitlab-ctl reconfigure , чтобы обновить конфигурацию.
    2. Запустите sudo gitlab-ctl restart postgresql , чтобы перезапустить PostgreSQL с новой конфигурацией.
    3. При запуске pg-upgrade на вторичном узле PostgreSQL этот узел будет удален.
      из кластера.
    4. После обновления всех вторичных узлов с помощью pg-upgrade пользователь
      останется одноузловой кластер, в котором будет только первичный узел.
    5. pg-upgrade , на вторичных узлах не будет обновлять существующие данные до
      соответствовать новой версии, так как эти данные будут заменены данными из
      первичный узел. Однако он переместит существующие данные в резервную копию
      место расположения.
  2. После обновления всех вторичных узлов запустите pg-upgrade на первичном узле.
    1. На основном узле отредактируйте /etc/gitlab/gitlab.rb , включив в него следующее:
      # Заменить X на значение количества узлов db + 1
    postgresql ['max_replication_slots'] = X
      
    1. Запустите gitlab-ctl reconfigure , чтобы обновить конфигурацию.
    2. Запустите sudo gitlab-ctl restart postgresql , чтобы перезапустить PostgreSQL с новой конфигурацией.
    3. На первичном узле pg-upgrade обновит существующие данные для соответствия
      новая версия PostgreSQL.
  3. Восстановите вторичные узлы, выполнив для каждого из них следующую команду

      gitlab-ctl repmgr настройка режима ожидания MASTER_NODE_NAME
      
  4. Проверить, вернулся ли кластер repmgr в исходное состояние

      gitlab-ctl repmgr cluster показать
      

Устранение неполадок при обновлении в кластере высокой доступности

Если в какой-то момент связанный PostgreSQL работал на узле перед обновлением до настройки высокой доступности, старый каталог данных может остаться.Это заставит gitlab-ctl перенастроить на более раннюю версию утилит PostgreSQL, которые он использует на этом узле. Переместите (или удалите) каталог, чтобы предотвратить это:

  • mv / var / opt / gitlab / postgresql / data / /var/opt/gitlab/postgresql/data.$(date +% s)

Если вы столкнулись со следующей ошибкой при воссоздании вторичных узлов с gitlab-ctl repmgr standby setup MASTER_NODE_NAME , убедитесь, что у вас есть postgresql ['max_replication_slots'] = X , заменив X значением числа db. node + 1, включен в / etc / gitlab / gitlab.руб :

  pg_basebackup: не удалось создать временный слот репликации «pg_basebackup_12345»: ОШИБКА: все слоты репликации используются
ПОДСКАЗКА: освободите один или увеличьте max_replication_slots.

  

Обновление экземпляра Geo

Поскольку Geo по умолчанию зависит от потоковой репликации PostgreSQL, есть
дополнительные соображения при обновлении GitLab и / или при обновлении
PostgreSQL описан ниже.

Внимание: если вы запускаете установку Geo с использованием PostgreSQL 9.6.x, обновитесь до GitLab 12.4 или новее. В более старых версиях возникла проблема, которая могла привести к сбою обновления базы данных PostgreSQL на вторичном сервере. См. Раздел Отключение автоматического обновления PostgreSQL, чтобы решить эту проблему. Теперь эта проблема исправлена.

предостережений при обновлении PostgreSQL с помощью Geo

Внимание: При использовании Geo обновление PostgreSQL требует простоя всех вторичных серверов .

При использовании Geo обновление PostgreSQL требует простоя всех вторичных серверов
потому что это требует повторной инициализации репликации PostgreSQL в Geo
вторичные .Это связано с тем, как работает потоковая репликация PostgreSQL.
Повторная инициализация репликации снова копирует все данные с первичного сервера, чтобы можно было
занимает много времени, в основном в зависимости от размера базы данных и доступных
пропускная способность. Например, при скорости передачи 30 Мбит / с и размере базы данных
100 ГБ, повторная синхронизация может занять примерно 8 часов. Видеть
Документация PostgreSQL
для большего.

Отключение автоматического обновления PostgreSQL

Начиная с GitLab 12.1 и заканчивая GitLab 12.9, обновления пакета GitLab пытаются обновить
PostgreSQL до версии 10.Икс. В GitLab 12.10 и новее обновления PostgreSQL
не происходят автоматически при использовании Geo.

Перед обновлением с GitLab 12.1 до GitLab 12.9 мы настоятельно рекомендуем
отключение автоматического обновления PostgreSQL и ручное обновление PostgreSQL
отдельно от обновления пакета GitLab, чтобы избежать непреднамеренного простоя.

Вы можете отключить автоматическое обновление PostgreSQL, выполнив на
все узлы, работающие под postgresql или geo-postgresql :

  sudo touch / etc / gitlab / disable-postgresql-upgrade
  
Как обновить PostgreSQL при использовании Geo

Для обновления PostgreSQL вам потребуется имя слота репликации и
пароль пользователя репликации.

  1. Найдите имя существующего слота репликации в базе данных геодезического источника.
    узел, запустите:

      sudo gitlab-psql -qt -c 'выбрать имя_слота из pg_replication_slots'
      

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

  2. Соберите пароль пользователя репликации.Он был установлен при настройке Geo в
    Шаг 1. Настройте основной сервер.

  3. Обновите PostgreSQL вручную на первичном сервере Geo. Запускать на начальных этапах географии
    узел базы данных:

      судо gitlab-ctl pg-upgrade
      

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

  4. Обновите PostgreSQL на вторичных серверах Geo вручную. Беги по гео
    вторичная база данных , а также база данных отслеживания :

      судо gitlab-ctl pg-upgrade
      
  5. Перезапустите репликацию базы данных на базе данных-получателе Geo , используя
    команда:

      sudo gitlab-ctl replicate-geo-database --slot-name = SECONDARY_SLOT_NAME --host = PRIMARY_HOST_NAME
      

    Вам будет предложено ввести пароль пользователя репликации основного.Замените SECONDARY_SLOT_NAME именем слота, полученным на первом шаге выше.

  6. Перенастройте GitLab во вторичной базе данных Geo , чтобы обновить
    pg_hba.conf файл. Это необходимо, потому что replicate-geo-database
    реплицирует первичный файл на вторичный.

  7. Перезапустите puma (или unicorn ), sidekiq и geo-logcursor .

      судо gitlab-ctl hup puma
    sudo gitlab-ctl перезапустить sidekiq
    sudo gitlab-ctl перезапустить geo-logcursor
      
  8. Перейдите к https: // your_primary_server / admin / geo / nodes и убедитесь, что все узлы исправны.

Пример Qt postgresql. PyQt - обработка базы данных

Коллекция примеров кода и руководств предоставляется вместе с Qt, чтобы помочь новым пользователям начать разработку Qt. Эти документы охватывают широкий круг тем, от базового использования виджетов до пошаговых руководств, которые показывают, как составляется приложение.

Примеры являются частью пакетов Qt. Посетите страницу загрузок для получения дополнительной информации. Откройте и запустите примеры в режиме приветствия Qt Creator.Большинство примеров выполняется на различных платформах, и для поиска примеров для конкретных платформ введите название платформы или любые ключевые слова в поле поиска.

Например, если ввести Android в поле поиска, будут перечислены примеры, полностью совместимые с Android. Для получения дополнительной информации о запуске примеров в Qt Creator посетите страницу Создание и запуск примера. Чтобы просмотреть список всех примеров Qt, посетите страницу Список примеров Qt.

Чтобы просмотреть и запустить примеры, предоставленные через проект Qt, посетите страницу примеров сообщества.Все примеры Qt перечисляют все примеры, классифицированные по модулю Qt, которому они принадлежат.

Принтер чеков React native

Включенная сюда документация является собственностью соответствующих владельцев. Qt и соответствующие логотипы являются товарными знаками компании Qt Company Ltd. Все остальные товарные знаки являются собственностью соответствующих владельцев. Примеры и учебные пособия Qt Набор примеров кода и учебных пособий предоставляется с Qt, чтобы помочь новым пользователям приступить к разработке Qt. Несколько драйверов поставляются с Qt, и можно добавить другие драйверы.

Stea% 3a% 26% 23034% 3bpronta la trasferta a tirana per l

Исходный код драйвера поставляется и может использоваться в качестве модели для написания собственных драйверов. SQLite - это внутрипроцессная система баз данных с лучшим тестовым покрытием и поддержкой на всех платформах. Полнота поддержки других систем зависит от наличия и качества клиентских библиотек. Большинство программ установки также позволяют устанавливать «библиотеки разработки», и это то, что вам нужно. Эти библиотеки отвечают за низкоуровневую связь с СУБД.Также убедитесь, что вы установили правильные библиотеки баз данных для вашей 32- или 64-битной архитектуры Qt.

2000 ford focus диаграмма топливной системы базовый веб-сайт

Сценарий настройки Qt пытается автоматически определить доступные клиентские библиотеки на вашем компьютере. Запустите configure -help, чтобы увидеть, какие драйверы можно собрать. Вы должны получить примерно такой результат:

Подробные сведения о каждом драйвере описаны ниже. Если что-то пойдет не так и вы хотите, чтобы qmake перепроверил ваши доступные драйверы, вы должны удалить config.Если вы столкнулись с ошибкой на этапе qmake, откройте config. Из-за практичности работы с внешними зависимостями только плагин SQLite3 поставляется с бинарными сборками Qt. Обратите внимание, что невозможно настроить каждый драйвер отдельно, только все сразу.

Однако драйверы

можно собирать отдельно. Если сборка Qt настроена с помощью -prefixit, необходимо также установить подключаемые модули после их сборки. Например:. Примечание: outval1 и outval2 - переменные, локальные для текущего соединения, и на них не влияют запросы, отправленные с другого хоста или соединения.

Sm s120vl root

Встроенный сервер MySQL является заменой обычной клиентской библиотеки. Вам понадобятся файлы заголовков MySQL, а также общая библиотека libmysqlclient. В зависимости от вашего дистрибутива Linux вам может потребоваться установить пакет, который обычно называется «mysql-devel». Получите установщик MySQL e. После установки проверьте наличие необходимых файлов :. Вместо этого вы можете получить mysql.

Если вы не используете компилятор Microsoft, замените nmake на mingwmake выше.При распространении приложения не забудьте включить libmysql. Он должен находиться в той же папке, что и исполняемый файл приложения. После подключения к серверу Oracle плагин автоматически определит версию базы данных и включит соответствующие функции.

PostgreSQL - Интерфейс C / C ++

Можно подключиться к базе данных Oracle без tnsnames. Для этого требуется, чтобы SID базы данных был передан драйверу в качестве имени базы данных и чтобы было указано имя хоста. Обычно это означает, что сервер базы данных будет использовать аутентификацию пользователя, предоставляемую операционной системой, вместо своего собственного механизма аутентификации.Оставьте имя пользователя и пароль пустыми при открытии соединения с QSqlDatabase, чтобы использовать аутентификацию внешних учетных данных.

Вот пример :. Если вы не используете компилятор Microsoft, замените nmake на mingwmake в строке выше. При запуске приложения вам также потребуется добавить файл oci.

Поддержка

ODBC может использоваться как резервный вариант для совместимых баз данных, если собственный драйвер недоступен.

Для систем Unix есть несколько реализаций, которые необходимо установить в первую очередь.Вы должны добавить пути postgre 'bin' и 'lib' к переменным среды.

Мне нравится, как установить имя приложения простым способом. Я думаю, что невозможно передать параметр во время подключения через setOptions, но я не уверен. После настройки подключения к конкретной базе данных из приложения Qt, SQL API помогает выполнять стандартные операции с базой данных, такие как открытие-закрытие соединения, таблицы запросов и т. Д.

Конфигурация, необходимая для запуска этого приложения: 1- PostgreSQL 9. Newer Post Older Post Home.Подпишитесь на: Комментарии к публикациям Atom. Искать в блоге. Популярные посты. Нарисуйте сетку в QGraphicsScene. Производный класс QGraphisScene позволяет дочернему классу повторно реализовать функцию drawBackground родительского класса.

Путем повторной реализации drawBackgrou Show QImage в QLabel. QImage позволяет создавать изображения из путей к файлам на диске. Созданные QImages могут отображаться в QLabel. Установив значение pixmap. При правильной инициализации двойные указатели могут использоваться как двумерная матрица. В примере приложения qt-console показан способ выделения .ini Qt Designer используется для разработки пользовательских интерфейсов для приложений QT.

В дополнение к использованию QT Designer для создания пользовательских интерфейсов, вы можете выдавать общее количество просмотров страниц. Карта посетителей. Несколько драйверов поставляются с Qt, и другие драйверы могут быть добавлены. Исходный код драйвера прилагается и может использоваться в качестве модели для написания ваших собственных драйверов.

SQLite - это внутрипроцессная система баз данных с лучшим тестовым покрытием и поддержкой на всех платформах. Полнота поддержки других систем зависит от наличия и качества клиентских библиотек.Большинство программ установки также позволяют устанавливать «библиотеки разработки», и это то, что вам нужно.

Эти библиотеки отвечают за низкоуровневую связь с СУБД. Сценарий настройки Qt пытается автоматически определить доступные клиентские библиотеки на вашем компьютере.

Запустите configure -help, чтобы увидеть, какие драйверы можно собрать. Вы должны получить примерно такой результат: Подробные сведения о каждом драйвере описаны ниже. Из-за практичности работы с внешними зависимостями только плагин SQLite3 поставляется с бинарными сборками Qt.

Обратите внимание, что невозможно настроить каждый драйвер отдельно, только их всех сразу. Однако драйверы можно собирать отдельно. Если сборка Qt настроена с помощью -prefixit, необходимо также установить подключаемые модули после их сборки.

Например :. Примечание: outval1 и outval2 - переменные, локальные для текущего соединения, и на них не влияют запросы, отправленные с другого хоста или соединения. Встроенный сервер MySQL является заменой обычной клиентской библиотеки.Вам понадобятся файлы заголовков MySQL, а также общая библиотека libmysqlclient.

В зависимости от вашего дистрибутива Linux вам может потребоваться установить пакет, который обычно называется mysql-devel. Вам необходимо получить установочные файлы MySQL. EXE и выберите «Выборочная установка». Если вы не используете компилятор Microsoft, замените nmake на mingwmake в строке выше. После подключения к серверу Oracle плагин автоматически определит версию базы данных и включит соответствующие функции.

Можно подключиться к базе данных Oracle без tnsnames.Для этого требуется, чтобы SID базы данных был передан драйверу в качестве имени базы данных и чтобы было указано имя хоста.

Python PyQt5 Tutorial - Example and Applications

Обычно это означает, что сервер базы данных будет использовать аутентификацию пользователя, предоставляемую операционной системой, вместо своего собственного механизма аутентификации. Исходный код libpqxx доступен по лицензии BSD, поэтому вы можно бесплатно загрузить, передать другим, изменить, продать, включить в свой собственный код и поделиться своими изменениями с кем угодно.

Последнюю версию libpqxx можно загрузить по ссылке Download Libpqxx. Если вы ищете более сложное приложение, вы можете заглянуть в официальную документацию libpqxx или использовать коммерчески доступные API. Это typedef, который будет использоваться для подключения к базе данных. Если соединение установлено успешно, он создает C с объектом соединения, который предоставляет различные полезные публичные функции. Если соединение активно, то этот метод возвращает true, в противном случае возвращает false.

Это typedef, который будет использоваться для создания транзакционного объекта с использованием соединения C, которое в конечном итоге будет использоваться для выполнения операторов SQL в транзакционном режиме. Если объект транзакции создается успешно, он присваивается переменной W, которая будет использоваться для доступа к общедоступным методам, связанным с транзакционным объектом.

Это typedef, который будет использоваться для создания нетранзакционного объекта с использованием соединения C, которое в конечном итоге будет использоваться для выполнения операторов SQL в нетранзакционном режиме.

Если объект транзакции создается успешно, то он присваивается переменной N, которая будет использоваться для доступа к общедоступным методам, связанным с нетранзакционным объектом. Этот общедоступный метод из нетранзакционного объекта будет использоваться для выполнения оператора SQL и возвращает объект результата, который на самом деле является интегратором, содержащим все возвращенные записи. В следующем сегменте кода C показано, как подключиться к существующей базе данных, работающей на локальном компьютере через порт. Теперь давайте скомпилируем и запустим указанную выше программу для подключения к нашей базе данных testdb, которая уже доступна в вашей схеме и к которой можно получить доступ с помощью пользовательских postgres и пароля. pass Вы можете использовать ID пользователя и пароль в зависимости от настроек вашей базы данных.

Не забудьте сохранить -lpqxx и -lpq в указанном порядке! В противном случае компоновщик будет горько жаловаться на отсутствующие функции с именами, начинающимися с «PQ. Предыдущая страница. Следующая страница. Предыдущая страница Печать страницы. Чтобы быть в курсе последних технологических тенденций, присоединяйтесь к DataFlair в Telegram.

Sordi 100: sua castiglioncello gli dedica 3 serate cinema

Сегодня мы рассмотрим Python PyQt5 Tutorial, а также увидим, как строить различные элементы графического интерфейса, такие как кнопки, окна и диалоговые окна ввода.Также мы рассмотрим приложения PyQt.

Вы знаете об итераторах Python. Это бесплатное программное обеспечение от Riverbank Computing, которое реализует не только функции и методы, но и классы.

Некоторые из них.

Узнайте о встроенных функциях Python. Для этого вам необходимо установить PyQt5. Вы можете использовать для этого pip. Чтобы войти в главный цикл приложения, мы делаем следующее. Мы добавляем это в главное окно, и метод showMessage выводит его в него. Взгляните на каталог Python.Используя класс QPushButton, мы можем добавлять кнопки на наш экран. При событии, таком как щелчок пользователя, виджет PyQt5 может излучать сигнал.

Интервью со специалистом по данным Shopify

Для нажатия кнопки и сигнала мы можем указать действие или слот. Вы знаете о множественном наследовании в Python. Для этого мы используем методы setText и text; виджет - QLineEdit. Вы должны изучить Python OrderDict. Вы можете разместить свои виджеты в любом месте экрана.

Диалог цвета - это диалоговое окно, позволяющее выбрать цвет из палитры цветов.Надеюсь, вам понравится наше объяснение. Ваш браузер не поддерживает JavaScript. В результате ваши впечатления от просмотра ухудшатся, и вы не сможете выполнять некоторые действия.

Загрузите браузер, поддерживающий JavaScript, или включите его, если он отключен i. Я использую Qt 5. Рецепт выпуска для target «Спасибо за прием и ответ!

Я новичок в Qt, считаю его потрясающим и с нетерпением жду возможности настроить на нем среду программирования баз данных. Только что переустановил Qt, но теперь QT5.По-прежнему та же ошибка: произошла ошибка при открытии соединения: драйвер не загружен. Драйвер не загружен. Установлен 32-битный PostgresSQL.

У меня все та же проблема. Я следую тексту ссылки на более ранний пост, чтобы решить эту проблему. Надеюсь, что это работает! SGaist сказал :. Он остается несохраненным, поскольку отображается полужирным шрифтом. Пожалуйста, помогите мне. Получил ключи из метаданных плагина «svg», «svgz», «svg. Выполнил Dependency Walker на« qsqlpsqld ». Уже скопировали libpq. Кстати, вы делаете это в части сборки? Это должно быть в части выполнения.

Вы можете сделать одну вещь, чтобы убедиться, что с этим все в порядке.

Qt Documentation

DLL предназначена для запуска Dependency Walker и добавления пути к libqp. Он должен показать вам, если с ним что-то не так.

DLL "уже существует здесь. Можете ли вы это уточнить? Если вы говорите, что это делается в Dependency Walker, тогда я не могу найти список путей поиска для добавления пути. Я уже запускал Dependency Walker на" qsqlpsqld. В Dependency Walker есть меню, название которого я сейчас не помню, которое позволяет вам настроить список путей для поиска зависимостей от того, что вы сейчас анализируете.

Там вы можете добавить путь к PostgreSQL. Существует так называемый порядок поиска модулей. Я не уверен, что вы указываете на него. Поскольку я не уверен, я хотел бы попробовать позже. Большое спасибо за ваш ответ и помощь. По-настоящему ценю это! Qt Forum. Его могут видеть только пользователи с правами управления темами.

Qt Database

Большое спасибо!

Пилотный компилятор для PostgreSQL с Qt 5.0.2 и MinGW под Windows, и теперь готовый

avant de se lancer:

Je vais dcrire ici la compilation du plugins Qpsql QT version 5.0.2 су компиляция MingWin 32 бит версия 4.7.
Et juste parce ce que ce ce fut un peu la galre pour y aboutir, donc cela vaut bien un petit mmo.

Создает 32-битную версию posgresql версии 9.2.4, поддерживает QT 5.0.2 или MingWin32 бит версии 4.7.

Nb: в исходном состоянии версии MingWin, компилятор находится в четырех версиях с установкой QT 5.0.2., После публикации, после того как QT доступен для версии 5.1 с версией 4.8 де MingWin 32 бита, эта идея, которая является принципом компиляции, не изменилась в лучшую сторону.

Важные ленты:

Вы можете загрузить данные по почте, версия 9.2.4. Ladresse suivante:

http://www.enterprisedb.com/products...wnload#windows.

Vous pouvez tlcharger QT 5.0.2 для MingWin 32 битная версия:

http://qt-project.org/downloads

  1. Installer postgresql, en suivant les tape standard de linstallation, vous pouvez installer postgresql sous c: \ program files, можно импортировать файлы для установки, чтобы составить файлы пространств, а затем исправить созданный файл Makefile.
  2. Выполняется установка пакета postgresql без восстановления после установки пакета postgresql, включая подпрограммы и библиотеки.
  3. Installez QT si ce nest pas fait, mais en installant galement les fichiers sources de QT, vous pouvez installer ces sources postriori (внимание должно быть только на парфюмированном кассере, которое требует конфигурации).
  4. Разрешить восстановление после обновления через пертуар% QTDIR% \ Src \ qtbase \ src \ plugins \ sqldrivers \ psql, а также использовать исходные файлы, содержащие ресурсы для плагинов, драйверы psql, графический интерфейс для доступа к QTDIR% \ Src \ qtbase \ src \ sql \ drivers \ psql, который содержит необходимые исходные коды для компиляции плагинов Notre.

Имя модификатора % QTDIR% \ Src \ qtbase \ src \ plugins \ sqldrivers \ psql \ psql.pro , en y ajoutant l option suivante:

 

1
2
3
4
5
6
7
8
9
10

 TARGET = qsqlpsql

DEFINES + = HAVE_STRUCT_TIMESPEC

ИСТОЧНИКИ = main.cpp
OTHER_FILES + = psql.json
включить (../../../ sql / drivers / psql / qsql_psql.pri)

PLUGIN_CLASS_NAME = QPSQLDriverPlugin
включать(../qsqldriverbase.pri) 

Pourquoi? : Simplement parce, whichs fichiers include se Trouvant dans le rpertoire include de postgresql redfinissent galement la structure TimeSpec, et quil est impratif de spcifier notre compilateur dutiliser la structure, se Trouvant dans le fichier C: \ Program Files \ PostgreSQL \ 9.2 \ include \ pthread.h, ce fichier включает макрос dfini une HAVE_STRUCT_TIMESPEC

 

1
2
3
4
5
6
7
8

#ifndef HAVE_STRUCT_TIMESPEC
#define HAVE_STRUCT_TIMESPEC 1
struct timespec {
long tv_sec;
long tv_nsec;
};
#endif / * HAVE_STRUCT_TIMESPEC * / 

Эта структура может быть использована не только для компиляции, но и для других целей.h du rpertoire include de notre compilateur C: \ Qt \ Qt5.0.2 \ Tools \ MinGW \ i686-w64-mingw32 \ include \ sys \ timeb.h

 

1
2
3
4
5
6
7

#ifndef _TIMESPEC_DEFINED
#define _TIMESPEC_DEFINED
struct timespec {
  time_t tv_sec; / * Секунды * /
  long tv_nsec; / * Наносекунды * /
}; 

Создавайте файлы Makefile

на основе утилиты для создания файла Makefile

.

Управляет консольным cmd с переменными QT, корректирующими dfini, классным QT nous предлагает целое меню dmarrer de lapplication

se mettre dans le rpertoire du fichier psql.pro

cd% QTDIR% \ src \ plugins \ sqldrivers \ psql

et excuter qmake avec les paramtres suivants:
qmake INCLUDEPATH + = C: \ Program Files \ PostgreSQL \ 9.2 \ include LIBS + Files = C: \ Program Files \ PostgreSQL \ 9.2 \ include LIBS \ PostgreSQL \ 9.2 \ lib psql.pro

Ceci разрешает файлы Makefile, Makefile.debug и Makefile.release, а также специально для некоторых случаев, когда вы ищите новые файлы include и fichier libpq.lib

Модификатор les fichiers Makefile

Qmake поддерживает малые левая номенклатура, созданная с использованием пространства, не изменяет файл Makefile, файлы, соответствующие c: \ program files

notamment les lignes suivantes, qui se fichiers en dbut de

 

1
2
3
4

INCPATH = -I.-I "C: \ Program Files \ PostgreSQL \ 9.2 \ include" -I "C: \ Qt \ Qt5.0.2 \ 5.0.2 \ mingw47_32 \ include" -I "C: \ Qt \ Qt5.0.2 \ 5.0.2 \ mingw47_32 \ include \ QtSql "-I" C: \ Qt \ Qt5.0.2 \ 5.0.2 \ mingw47_32 \ include \ QtSql \ 5.0.2 "-I" C: \ Qt \ Qt5.0.2 \ 5.0.2 \ mingw47_32 \ include \ QtSql \ 5.0.2 \ QtSql "-I" C: \ Qt \ Qt5.0.2 \ 5.0.2 \ mingw47_32 \ include \ QtCore "-I" .moc \ release_shared "-I" .. \ .. \ .. \ .. \ mkspecs \ win32-g ++ "
 
LIBS = "C: \ Program Files \ PostgreSQL \ 9.2 \ lib \ libpq.lib" -LC: \ Qt \ Qt5.0.2 \ 5.0.2 \ mingw47_32 \ lib -lQt5Sql -lQt5Core 


Lancer la compilation

Dans le rpertoire courant qui doit tre% QTDIR% \ src \ plugins \ sqldrivers \ psql, excutez la command mingwin32-make.

и нормальная компиляция => et mingwin32 nous gnre deux DLL qsqlpsqld.dll (версия Debug) и qsqlpsql.dll (версия Release плюс lgre) в пертуар .. \ .. \ .. \ .. \ plugins \ sqldrivers

Mettre en prod ces DLL

il ne vous reste plus qua copier les DLL dans le rpertoire% QTDIR% \ plugins \ sqldrivers, вы работаете с DLL в каталоге, но не обращайте внимания на драйверы ODBC3.

nb: ne pas copier les fichiers dextension .a (inutile sous Windows)

Faire указатель на переменную systme% PATH% на DLL de postgresql, для простого упрощения переменной notre% PATH% le chemin suivant:

C: \ Program Files \ PostgreSQL \ 9.2 \ bin

для того, чтобы драйверы не добавляли DLL libpq.dll, после чего исправляли функции.

FIN

Новые вопросы о postgresql - Задайте Ubuntu

Новые вопросы о postgresql - Задайте Ubuntu

Сеть обмена стеков

Сеть Stack Exchange состоит из 177 сообществ вопросов и ответов, включая Stack Overflow, крупнейшее и пользующееся наибольшим доверием онлайн-сообщество, где разработчики могут учиться, делиться своими знаниями и строить свою карьеру.

Посетить Stack Exchange

  1. 0

  2. +0

  3. Авторизоваться
    Зарегистрироваться

PostgreSQL - это мощная объектно-реляционная база данных с открытым исходным кодом.

Почему сервер Ubuntu просит меня перезапустить службы?

Я установил последнюю версию Ubuntu Server на Linode. Когда я устанавливаю некоторые пакеты с помощью apt-get, например node.js или postgres, он останавливается, и появляется окно с вопросом.
Как отключить это окно вопроса?
...

задан 30 мая в 17:28

убунту 20.04 sudenly используя порт 5432?

Я отлично использовал докер postgres с ubuntu 18.04. Теперь я обновился до ubuntu 20.04, и я внезапно больше не могу запускать докер, так как появляется следующая ошибка - обратите внимание, что эта ошибка сохраняется ...

задан 25 мая в 11:35

paul23

31322 серебряных знака1010 бронзовых знаков

Передать файл root-пользователя пользователю postgres

У меня есть пользователь root
а также вспомогательный пользователь postgres
sudo su - postgres

эта команда регистрирует меня как пользователя postgres

У меня есть файл test.txt на рабочем столе

Как мне сделать этот файл видимым дома ...

задан 30 апр в 20:22

Установка PostGIS с GDAL 3.0.4

Я установил PostgreSQL на Ubuntu 18.04, следуя этим инструкциям: https: // computingforgeeks.com / install-postgresql-12-на-ubuntu /
Сейчас пытаюсь установить расширение PostGIS:
sudo apt install ...

задан 28 апр в 20:37

Ошибки OSM: карта не отображает правильно

Пару дней пытаюсь создать и настроить локальный картографический сервер.Я использовал этот учебник, чтобы попытаться запустить сервер, но по какой-то причине мои плитки не отображаются полностью. https: ...

задан 22 апр в 14:39

Невозможно установить PgAdmin4 в Ubuntu 20.04

Я новый участник AskUbuntu и StackOverflow в целом.
Я пытаюсь установить pgAdmin4 на Ubuntu 18.04, следуя этому руководству по LinuxHint. Я успешно создал virtualenv, проверил это ...

задан 16 апр в 9:19

Нет модуля с именем psycopg2 + ошибка при установке

Я разработал сценарий python, который импортирует данные в мою базу данных Postgres, и он отлично работает на моем локальном компьютере, но когда я перенес его на сервер, он не работает:
Отслеживание (последний вызов последний):
Файл &...

задан 15 апр в 9:29

Мистер П.

13111 серебряный знак1010 бронзовых знаков

Восстановить mysql db из AWS AMI?

У нас есть один экземпляр EC2, на котором работает наш сервер базы данных mysql.из-за инцидента безопасности нам пришлось удалить текущий экземпляр EC2, поскольку база данных была полностью испорчена каким-то шифрованием.
Так ...

задан 1 мар в 13:42

Hrish

2,1631111 золотых знаков3838 серебряных знаков5959 бронзовых знаков

автоматические обновления и версия postgresql

Может ли команда apt dist-upgrade в дистрибутивах Ubuntu / Debian обновить версию PostgreSQL?
У меня есть Ubuntu 18.04 LTS-серверы, использующие PostgreSQL 9.6, и я не хочу, чтобы выполнение автоматических обновлений выполнялось ...

задан 26 фев в 15:32

Спросите Ubuntu лучше всего работает с включенным JavaScript

Ваша конфиденциальность

Нажимая «Принять все файлы cookie», вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в ​​отношении файлов cookie.

Принимать все файлы cookie

Настроить параметры

kquery · PyPI

Описание проекта

Проклятый клиент базы данных на основе QT

Этот клиент postgresql предназначен для пользователей KDE Plasma, которые имеют оборудование с действительно низкими характеристиками (ноутбуки Yepo, Raspberry PI и т. Д.), Тех, кто уже запускает рабочий стол Plasma или QT и не хочет дополнительных ресурсов, таких как полные IDE базы данных, такие как DBeaver уже предоставляет.

Цель состоит в том, чтобы сохранить легкий, быстрый, крошечный, удобный интерфейс с основными функциями базы данных для разработчиков программного обеспечения.

Если вам нужны сложные функции управления базами данных, у вас есть приличная современная рабочая станция или если вы не используете рабочий стол Plasma / QT, этот инструмент не для вас, существует множество других замечательных клиентов.

Бонусная функция: забавные диалоги для взаимодействия с пользователем.

Шаги установки:

Этот этап довольно сложный, но я рассчитываю на вас!

$ pip install kquery

А затем, чтобы запустить:

$ kquery

И все!

Часто задаваемые вопросы:

В. Почему вы выбрали PyQt5, фреймворк размером более 100 МБ для «легкого» клиента базы данных? Вы, должно быть, глупо загружаете столько зависимостей для такого маленького приложения.

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

Q - Планируете ли вы предоставить другие коннекторы баз данных? Или улучшенные функции подключения postgresql?

А - Да! Если у меня достаточно времени и время загрузки приложения, а производительность не снижается, почему бы и нет?

Скачать файлы

Загрузите файл для своей платформы.Если вы не уверены, что выбрать, узнайте больше об установке пакетов.

Файлы для kquery, версия 0.0.3
Имя файла, размер Тип файла Python версии Дата загрузки Хешей
Имя файла, размер

kquery-0.0.3-py3-none-any.whl

(8.9 КБ)

Тип файла
Колесо
Версия Python

py3

Дата загрузки
Хеши

Вид

Имя файла, размер

kquery-0.0.3.tar.gz

(7,7 кБ)

Тип файла
Источник
Версия Python

Никто

Дата загрузки
Хеши

Вид

OPSWAT | Вакансии в OPSWAT

Резюме

Мы ищем практического инженера по программному обеспечению Java, который присоединился бы к нашей растущей группе разработки продуктов R&D.Это прекрасная возможность работать в талантливой команде, помогающей развивать и поддерживать наши продукты безопасного доступа. Если вы знающий, творческий, увлеченный человек, который заинтересован в разработке и создании уникальных решений безопасности, которые никто не создает, тогда мы хотим вас!

Чем вы будете заниматься

• Проектировать, разрабатывать, внедрять и тестировать продукты MetaAccess OPSWAT

• Предоставлять исходные данные и документацию по новым или существующим функциям

• Сотрудничать с членами вашей команды scrum для выполнения обязательств по спринту

• Работа с местными и удаленными командами инженеров для достижения квартальных целей

• Сотрудничать с отделом управления продуктами в отношении требований к продукту

• Участвовать в получении и проведении экспертных обзоров кода

• Предоставлять рекомендации младшим членам команды

Что нам нужно от вас

• Более 4 лет практического использования Java

• Опыт разработки под Linux или Windows

• Отличные навыки объектно-ориентированного проектирования и программирования в многопоточных приложениях

• Excelle Устные и письменные коммуникативные навыки

• Самомотивирован с доказанной способностью хорошо работать в быстро меняющейся командной среде

• Технический руководитель, который может руководить техническими решениями для небольшой группы инженеров

• Знание систем автоматизации и языки сценариев

Было бы неплохо, если бы у вас был

• Опыт сетевого программирования (TCP / IP)

• Наличие сетевой конфигурации и инфраструктуры - большой плюс

• Опыт работы со Spring, Hibernate, MySQL или MongoDB

• Опыт работы с ActiveMQ, AD / LDAP, SAML и другими корпоративными технологиями

• Опыт использования REST API и интеграции SDK

• Опыт работы с Git, Bitbucket, Jira, Confluence, TeamCity

• Опыт работы с Agile / Scrum среда

• Опыт разработки корпоративных приложений

• Опыт в области кибербезопасности

О OPSWAT

OPSWAT - мировой лидер в области кибербезопасности критически важной инфраструктуры, которая помогает защитить критически важные организации мира от вредоносных программ и атак нулевого дня.Чтобы свести к минимуму риск компрометации, решения OPSWAT Critical Infrastructure Protection (CIP) позволяют как государственным, так и частным организациям внедрять процессы, обеспечивающие безопасную передачу файлов и устройств в критические сети и из них. В общей сложности 98% объектов ядерной энергетики США и более 1000 организаций по всему миру, включая финансовые услуги, оборону, производство, энергетику, аэрокосмическую промышленность, транспортные системы, доверяют OPSWAT защиту своих файлов и устройств; обеспечивать соблюдение отраслевых и государственных политик и нормативных актов, а также защищать свою репутацию, финансы, сотрудников и отношения от киберпреступлений.Для получения дополнительной информации посетите www.opswat.com.

Чтобы подать заявку на эту должность, отправьте нам свое резюме и сопроводительное письмо через JobScore. Особое внимание будет уделяться тем кандидатам, в сопроводительном письме которых указано, что они просматривали наш веб-сайт. Пожалуйста, никаких дроп-инов, звонков и факсов.

См. Полное описание вакансии

TreeFrog Framework | Высокоскоростной C ++ MVC Framework для веб-приложений

Введение

Что такое TreeFrog Framework

TreeFrog Framework - это полнофункциональная платформа для веб-приложений.Написанный на C ++, он легкий (низкие требования к ресурсам) и обеспечивает чрезвычайно быструю работу.

С целью снижения затрат на разработку при создании фреймворка C ++ была применена политика «соглашения важнее конфигурации». Файл конфигурации сделан как можно меньше. Поскольку он обеспечивает помощь в автоматическом создании кода для систем шаблонов (каркасов), сопоставления O / R и ORM, разработчики могут сосредоточиться на логике.

Кроссплатформенный

TreeFrog Framework является кроссплатформенным.Конечно, он работает в Windows, но также и в UNIX-подобных операционных системах, macOS и Linux. Используя кодирование с открытым исходным кодом Windows, можно поддерживать Linux. Также возможны веб-приложения, работающие на нескольких платформах, просто путем перекомпиляции исходного кода.

Контроллер

Разработчики легко смогут получить данные, представляющие HTTP-запрос / ответ и сеанс. В дополнение к этому, он уже предоставил такие же полезные грубые функции, как аутентификация входа в систему, проверка формы и контроль доступа.Кроме того, поскольку он обеспечивает механизм (систему маршрутизации) для вызова методов соответствующим контроллером от запрошенного URL-адреса к требуемым действиям, нет необходимости записывать правила одно за другим в файл конфигурации или распространять какие-либо запросы на действия.

Посмотреть

На уровне представления могут использоваться описания формата ERB, хорошо известные в Rails. Код C ++ <%…%> может быть встроен в файлы HTML. Это означает, что кодирование может быть написано очень похоже на язык сценариев.Он также предлагает новую систему шаблонов (Otama), которая полностью отделяет логику представления от шаблонов. Написанный на чистом HTML, шаблон может описывать файл логики, закодированный на C ++. Это позволяет программистам и дизайнерам сотрудничать.

Модель

На уровне модели, называемом SqlObject, предоставляется преобразователь O / R (система сопоставления O / R). Таким образом, разработчики приложений смогут сосредоточиться на разработке бизнес-логики без необходимости писать слишком много из-за этого SQL.Однако при этом, если данные необходимо использовать в сложных условиях, можно легко использовать SQL. SQL-запросы можно выполнять легко и безопасно с помощью заполнителей.
Кроме того, эта структура совместима со всеми основными программами баз данных, такими как MySQL, PostgreSQL, SQLite, DB2 и Oracle.

На основе Qt

Qt и TreeFrog Framework связаны. Не только мощная среда Qt GUI, но и функциональность, отличная от GUI, также очень хороша. Комбинируя веб-приложения для базового модуля, контейнерного класса, сети, SQL, JSON, модульного теста и мета-объекта, разработчики приложений получают очень удобные возможности использования.

Открытый исходный код

TreeFrog Framework - это программное обеспечение с открытым исходным кодом под новой лицензией BSD (лицензия BSD с тремя пунктами).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *