Как подключить postgresql к visual studio
В этой статье я попытаюсь осветить основные аспекты создания dll библиотек с функциями для PostgreSQL с использованием Microsoft VS. Функции можно использовать для определения собственных типов данных, обработки и индексирования данных и т.д. Для всего этого дела я использовал платформу Windows (после отладки вы без особого труда можете перекомпилировать свои творения на любую платформу, немного изменив код), PostgreSQL версии 9.0 (можно 8.4) и Microsoft Visual Studio 2010.
Для начала создадим новый проект в VS. В заготовках проектов для C++ выбираем «Win32 Project». Далее, в опциях мастера создания новых проектов, в типе приложения (Application Type) переключаем radio button на «DLL», а в дополнительных опциях ставим галочку на пункте «Пустой проект» (Empty Project). Затем создаём в папочке с исходниками(Source files) новый файлик «main.c». Вообще с давних пор в VS создаётся впечатление, что чистого Си в нём нет, и добавление Си файлов просходит путём создания файлов с разширением "*.cpp" и перемеинованием расширения в ".c".
Сейчас нам нужно подключить несколько библиотек к проекту. Сначала VS будет упорно ругаться на отсутствие данных файлов, но обращать на это внимание не стоит, т.к. чуть позже мы это победим. Добавляем следующий код в наш «main.c».
Содержимое файла "libintl.h" в нашем проекте использоваться не будет, поэтому можно создать файл заглушку. Для этого в хидерах нашего проекта(Header Files) создаём файл заглушку с именем "libintl.h" и добавляем в него следующее:
Теперь нам нужно объяснить VS в каких директориях ей следует искать наши библиотеки. Я буду приводить те пути, которые указаны у меня, вам же следует переделать их на свои. Для добавления директорий к библиотекам необходимо в пункте меню выбрать свойства проекта(Project\Properties). В открывшемся окне заходим в свойста директорий VS++ (VS++ directories) и добавляем в Include Directories следующее:
C:\Program Files\PostgreSQL\9.0\include\server\port\Win32
C:\Program Files\PostgreSQL\9.0\include\server\port
C:\Program Files\PostgreSQL\9.0\include\server
C:\Program Files\PostgreSQL\9.0\Include\internal
Для того чтобы PostgreSQL смог загрузить точки входа в функции, необходимо их экспортировать из dll и дополнительно сделать магический постгрес-define. Для этого пишем:
Для того чтобы ускорить компиляцию можно добавить ещё пару дефайнов:
Теперь нам необходимо подружить линковщик с библиотеками PostgreSQL. Для этого опять заходим в свойства проекта -> свойства линковщика(Linker) и добавляем ему следующую директорию с библиотеками(Additional Library Directories):
Тут же выставляем Link Library Dependencies в «Yes». Затем заходим в свойства линковщика(Linker)-> Input и в поле Additional Dependencies вписываем «Postgres.lib». На этом с кучей ни разу не очевидных не сложных настроек VS покончено. Создадим наконец-то простую функцию в файле «main.c» для тестирования в PostgreSQL:
DLLEXPORT
int add_one (int arg) return arg + 1;
>
В этом месте всё должно скомпилироваться. Теперь копируем в C:\Program Files\PostgreSQL\9.0\lib\ получившуюся dll и переходим к PostgreSQL. Командуем ему:
CREATE or replace FUNCTION add_one(integer) RETURNS integer
AS '$libdir/mycool.dll', 'add_one'
LANGUAGE C STRICT;
SELECT add_one(99)
Если по непонятным причинам PostgreSQL скажет, что не нашёл dll, то следует заменить одинарный слеш, двойным. Если всё сделано правильно, то PostgreSQL выдаст нам число «100».
Для удобства можно переназначить путь создаваемой dll прямо в директорию с dll библиотеками PostgreSQL. Также следует помнить, что для замены нашей dll необходимо будет постоянно перезагружать сервер баз данных. Лично я, для удобства использовал бесплатную утилиту Unlocker для разблокировки dll, и после этого без проблем заменял её.
- Установка при помощи NuGetPkgManager. Скачивается и устанавливается пакет Npgsql
- Самостоятельная сборка Npgsql.dll. И мы воспользуемся именно этим методом
Для чего необходимо:
Распаковать, открыть через Visual Studio и произвести сборку проекта Npgsql из папки src, установив сверху не Debug, а Release
В результате описанных выше процедур в папке: npgsql-4.1.7\src\Npgsql\bin\Release\net461\
окажется файл Npgsql.dll
После чего этот файл необходимо скопировать в директорию с исходными кодами проекта, в котором будет использоваться соединение с PostgreSQL и в Обозревателе решений Visual Studio нажать на ссылки->добавить ссылку в открывшемся окне нажимем Обзор и выбираем нашу Npgsql.dll
Подключаем в требуемом месте заголовок using Npgsql;
Довольствуемся результатом
Использование
Подключение к базе данных
Чтобы начать использовать Npgsql нам понадобится сервер Postgre(Очевидно) и некоторая информация о подключении к серверу.
Подключение к серверу формируется при помощи так называемых ConnectionString. Для PostgreSQL имеющих следующий формат:
string connString = "Host=myserver;Username=mylogin;Password=mypass;Database=mydatabase";
Вместо myserver необходимо указать адрес нашего сервера, например: localhost, 127.0.0.1, 192.168.0.12 и т.п. Вместо mylogin указываем наш логин.
Вместо mydatabase указываем нашу базу данных
Далее необходимо подсоединится к базе данных при помощи следующей команды:
NpgsqlConnection nc = new NpgsqlConnection(connString);
try
//Открываем соединение.
nc.Open();
>
catch(Exception ex)
//Код обработки ошибок
>
NpgsqlConnection nc = new NpgsqlConnection(connString);
nc.Open();
if(nc.FullState == ConnectionState.Broken || nc.FullState == Connection.Closed)//Тут меняем что-то в своей жизни, но я обычно выбрасываю исключение, чтобы не искать в коде миллион лет, что сломалось.
>
Выполнение запросов к базе данных
Для выполнения команд используется объект класса NpgsqlCommand следующим образом:
NpgsqlCommand npgc = new NpgsqlCommand("ЗАПРОС", nc);
int rows_changed=npgc.ExecuteNonQuery();//Если запрос не возвращает таблицу
NpgsqlDataReader ndr = npgc.ExecuteReader()//Если запрос возвращает таблицу
Далее необходимо обработать полученные результаты следующим образом:
NpgsqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)//Если пришли результаты
while (reader.Read())//Пока есть записи
if (reader.GetFieldType(i).ToString() == "System.Int32")//Проверяем тип следующей записи
ResultAsStringArray[i, tmp] = reader.GetInt32(i).ToString();//Получаем запись и переводим её в строку
>
>
>
>
Данный пример показан лишь для демонстрации, весь остальной код - пишите сами.
PostgreSQL может быть собран с помощью компилятора Visual C++ от Microsoft. Этот компилятор есть в пакетах Visual Studio , Visual Studio Express и в некоторых версиях Microsoft Windows SDK . Если у вас ещё не установлена среда Visual Studio , проще всего будет использовать компиляторы из Visual Studio 2019 или из Windows SDK 10 , которые Microsoft распространяет бесплатно.
С применением инструментария Microsoft Compiler возможна и 32-, и 64-битная сборка. 32-битную сборку PostgreSQL можно произвести с использованием Visual Studio 2013 — Visual Studio 2019 , а также отдельных выпусков Windows SDK версии с 8.1a по 10. Для 64-битных сборок также можно использовать Microsoft Windows SDK версии с 8.1a по 10 или Visual Studio 2013 и новее. При сборке с Visual Studio 2013 — Visual Studio 2019 поддерживаются системы, начиная с Windows 7 и Windows Server 2008 R2 SP1 .
Инструменты для компиляции с помощью Visual C++ или Platform SDK находятся в каталоге src\tools\msvc . При сборке убедитесь, что в системном пути PATH не подключаются инструменты из набора MinGW или Cygwin . Также убедитесь, что в пути PATH указаны каталоги всех необходимых инструментов Visual C++. Если вы используете Visual Studio , запустите Visual Studio Command Prompt . Если вы хотите собрать 64-битную версию, вы должны выбрать 64-битную версию данной оболочки, и наоборот. Начиная с Visual Studio 2017 , это можно сделать в командной строке, воспользовавшись скриптом VsDevCmd.bat . О его параметрах и их значениях по умолчанию можно узнать, запустив его с ключом -help . Вы можете выбрать целевую архитектуру процессора, тип сборки и целевую ОС в приглашении Visual Studio Command Prompt с помощью скрипта vcvarsall.bat . Например, выполнив vcvarsall.bat x64 10.0.10240.0 , вы подготовитесь к сборке выпускаемой 64-битной версии для Windows 10. О других параметрах vcvarsall.bat можно узнать, запустив его с ключом -help . Все эти скрипты должны запускаться из каталога src\tools\msvc .
До начала сборки может потребоваться отредактировать файл config.pl и изменить в нём желаемые параметры конфигурации или пути к сторонним библиотекам, которые будут использоваться. Для получения конфигурации сначала считывается и разбирается файл config_default.pl , а затем применяются все изменения из config.pl . Например, чтобы указать, куда установлен Python , следует добавить в config.pl :
Вам нужно задать только те параметры, которые отличаются от заданных в config_default.pl .
Если вам необходимо установить какие-либо другие переменные окружения, создайте файл с именем buildenv.pl и поместите в него требуемые команды. Например, чтобы добавить путь к bison, которого нет в PATH, создайте файл следующего содержания:
Передать дополнительные аргументы командной строки команде сборки Visual Studio (msbuild или vcbuild) можно так:
18.1.1. Требования
Для сборки PostgreSQL требуется следующее дополнительное ПО. Укажите каталоги, в которых находятся соответствующие библиотеки, в файле конфигурации config.pl .
Устанавливая SDK, вы всегда должны выбирать для установки пункт Windows Headers and Libraries (Заголовочные файлы и библиотеки Windows). Если вы установили Windows SDK , включая Visual C++ Compilers , Visual Studio для сборки вам не нужна. Обратите внимание, что с версии 8.0a в SDK для Windows не включается полное окружение для сборки в командной строке. ActiveState Perl
Следующее дополнительное ПО не требуется для базовой сборки, но требуется для сборки полного пакета. Укажите каталоги, в которых находятся соответствующие библиотеки, в файле конфигурации config.pl .
Требуется для компиляции PL/Tcl (Заметьте, что требуется версия 8.4 или выше, при этом достаточно бесплатного стандартного дистрибутива (Standard Distribution)). Bison и Flex
Для компиляции из Git требуются Bison и Flex , хотя они не нужны для компиляции из дистрибутивного пакета исходного кода. Bison должен быть версии 1.875 или 2.2, либо новее, а Flex — версии 2.5.31 или новее.
Вам потребуется добавить каталог, содержащий flex.exe и bison.exe , в путь, задаваемый переменной PATH, в buildenv.pl , если она его ещё не включает. В случае с MinGW, это будет подкаталог \msys\1.0\bin в каталоге вашей инсталляции MinGW.
Примечание
Bison, поставляемый в составе GnuWin32, может работать некорректно, когда он установлен в каталог с именем, содержащим пробелы, например, C:\Program Files\GnuWin32 (целевой каталог по умолчанию в англоязычной системе). В таком случае, возможно, стоит установить его в C:\GnuWin32 или задать в переменной окружения PATH короткий путь NTFS к GnuWin32 (например, C:\PROGRA
18.1.2. Специальные замечания для 64-битной Windows
PostgreSQL для архитектуры x64 можно собрать только в 64-битной Windows, процессоры Itanium не поддерживаются.
Совместная сборка 32- и 64-битных версий в одном дереве не поддерживается. Система сборки автоматически определит, в каком окружении (32- или 64-битном) она запущена, и соберёт соответствующий вариант PostgreSQL. Поэтому сборку важно запускать в командной оболочке, предоставляющей нужное окружение.
Для использования на стороне сервера сторонних библиотек, таких как python или OpenSSL , эти библиотеки также должны быть 64-битными. 64-битный сервер не поддерживает загрузку 32-битных библиотек. Некоторые библиотеки сторонних разработчиков, предназначенные для PostgreSQL, могут быть доступны только в 32-битных версиях и в таком случае их нельзя будет использовать с 64-битной версией PostgreSQL.
18.1.3. Сборка
Чтобы собрать весь PostgreSQL в конфигурации выпуска (по умолчанию), запустите команду:
Чтобы собрать весь PostgreSQL в конфигурации отладки, запустите команду:
Для сборки отдельного проекта, например psql, выполните, соответственно:
Чтобы сменить конфигурацию по умолчанию на отладочную, поместите в файл buildenv.pl следующую строку:
Также возможна сборка из графической среды Visual Studio. В этом случае вам нужно запустить в командной строке:
и затем открыть в Visual Studio полученный pgsql.sln в корневом каталоге дерева исходных кодов.
18.1.4. Очистка и установка
В большинстве случаев за изменением файлов будет следить автоматическая система отслеживания зависимостей в Visual Studio. Но если изменений было слишком много, может понадобиться очистка установки. Чтобы её выполнить, просто запустите команду clean.bat , которая автоматически очистит все сгенерированные файлы. Вы также можете запустить эту команду с параметром dist , в этом случае она отработает подобно make distclean и удалит также выходные файлы flex/bison.
По умолчанию все файлы сохраняются в подкаталогах debug или release . Чтобы установить эти файлы стандартным образом, а также сгенерировать файлы, требуемые для инициализации и использования базы данных, запустите команду:
Если вы хотите установить только клиентские приложения и интерфейсные библиотеки, выполните команду:
18.1.5. Запуск регрессионных тестов
Чтобы запустить регрессионные тесты, важно сначала собрать все необходимые для них компоненты. Также убедитесь, что в системном пути могут быть найдены все DLL, требуемые для загрузки всех подсистем СУБД (например, DLL Perl и Python для процедурных языков). Если их каталоги в пути поиска отсутствуют, задайте их в файле buildenv.pl . Чтобы запустить тесты, выполните одну из следующих команд в каталоге src\tools\msvc :
Чтобы выбрать другой планировщик выполнения тестов (по умолчанию выбран параллельный), укажите его в командной строке, например:
За дополнительными сведениями о регрессионных тестах обратитесь к Главе 33.
Для запуска регрессионных тестов клиентских программ с применением команды vcregress bincheck или тестов восстановления, с применением vcregress recoverycheck , должен быть установлен дополнительный модуль Perl:
Тесты TAP, запускаемые скриптом vcregress , поддерживают переменные окружения PROVE_FLAGS и PROVE_TESTS , в которой автоматически разворачиваются шаблоны имён. Данные переменные можно установить в терминале Windows перед запуском vcregress :
Windows 10 компилирует расширение PostgreSQL plpgsql_check с помощью Visual Studio
Эта статья записывает компиляцию исходного кода, используя против. Скомпилированная версия является 64-битной.
Операционный центр: Windows 10
Инструмент для компиляции: vs2013
2. Загрузите и установите Microsoft Visual C ++ 2010 (тестирование пройдено в 2010 и 2013 годах, можно установить только модуль C ++)
1. Создайте новый пустой проект C ++, File-> New-> Project .
2. Создайте исходные файлы, щелкните правой кнопкой мыши на Исходные файлы-> Добавить-> Новые элементы .
Скопируйте исходный код plpgsql_check.c в него, будут некоторые ошибки, не беспокойтесь, и медленно исправляйте это позже.
3. Скопируйте файл plpgsql_check_builtins.h из исходного файла во включаемый файл под pg.
Мой путь: D: \ Program Files \ PostgreSQL \ 10 \ include
1. Добавлена 64-битная конфигурация программы. vs поставляется с конфигурацией win32 по умолчанию. Выберите Release, щелкните Configuration Manager .
Выберите раскрывающийся список Win32, нажмите кнопку «Добавить», выберите бит x64 и нажмите кнопку «ОК».
Щелкните правой кнопкой мыши имя проекта -> щелкните «Свойства», выберите «Освободить» в раскрывающемся списке «Конфигурация» в верхнем левом углу и выберите x64-bit.
Примечание: имя здесь можно настроить и добавить в Configuration Manager. Различные имена представляют разные конфигурации проекта.
2. Выберите Свойства конфигурации-> Общие и установите для «Тип конфигурации» значение «Динамическая библиотека (.dll)».
3.C / C ++ -> Препроцессор-> Определения препроцессора-> <Редактировать . >, добавьте инструкцию WIN64
4. Выберите C / C ++ -> Генерация кода и установите «Включить исключения C ++» на «Нет».
5. Выберите C / C ++ -> Advanced и установите «Compile As» в «C Code».
6. Выберите Linker-> Manifest File и установите для «Generate Manifest» значение «No».
7. Выберите Linker-> Input-> Additional Dependencies и добавьте postgres.lib в список ресурсов
Теперь вам нужно добавить необходимые каталоги включения.
1. Свойства конфигурации-> C / C ++ -> Общие-> Дополнительные каталоги включения, потяните стрелку вниз справа от текстового поля и выберите ее. Теперь, вставив путь или выбрав папку, добавьте следующие папки в каталог установки PostgreSQL в следующем порядке:
2. Вам также необходимо указать путь к библиотеке. Выберите «Linker» -> «General» в дополнительных каталогах библиотеки.
3. Решить ошибки подсветки исходного кода
Здесь есть несколько синтаксических ошибок. Фактически, при копировании исходного кода случайно был скопирован символ новой строки. Давайте откроем исходный код и посмотрим
Просто переместите эти три "\" на предыдущую строку.
Нажмите «ОК». При возврате к исходному файлу подсветка ошибки в файле расширения должна исчезнуть.
1. Щелкните правой кнопкой мыши проект-> Перестроить
fatal error C1083: Cannot open include file: 'unicode/ucol.h': No such file or directory
Двойной щелчок по этой строке ошибки откроет файл pg_locale.h и обнаружит синтаксические ошибки.
Загрузите бинарную загрузку ICU4C, не загружайте исходный код, потому что файлы исходного кода разбросаны и есть много папок, которые нужно представить.
Читайте также: