Как подключить postgresql к c
Перейти к содержимому

Как подключить postgresql к c

  • автор:

Как подключить PostgreSQL с нуля

Я знаю что PostgreSQL довольно хорошая, быстрая и надежная. Но вот как бы мне подключиться на С++ к базе данных с нуля? Что нужно устанавливать?
Как настроить?
Какая библиотека С++ для подключения? Допустим SQLite(я использовал только в python django) это просто один файл . Но я сомневаюсь, что postresql тоже просто 1 файл. Ну вообщем, как мне настроить базу данных на postgreSQL локально(можно так же сказать как это потом на просторы интернета залить, но не обязательно). И как подключится через С++ к ней. Ну и выполнять запросы.

Отслеживать
27k 3 3 золотых знака 27 27 серебряных знаков 40 40 бронзовых знаков
задан 3 июл 2020 в 8:55
1,128 2 2 золотых знака 7 7 серебряных знаков 31 31 бронзовый знак

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

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

Как настроить — да никак, для использования в одну каску он готов к употреблению. Кроме постгреса вам может понадобится pgadmin4 (Или любой другой его аналог). Это инструмент администрирования, он работает через веб-браузер. Настройка там тривиальна:

Хост localhost Пользователь postgres Пароль пустой База postgres 

Клиентская библиотека называется libpq

* testlibpq.c * * Test the C version of libpq, the PostgreSQL frontend library. */ #include #include #include static void exit_nicely(PGconn *conn) < PQfinish(conn); exit(1); >int main(int argc, char **argv) < const char *conninfo; PGconn *conn; PGresult *res; int nFields; int i, j; /* * If the user supplies a parameter on the command line, use it as the * conninfo string; otherwise default to setting dbname=postgres and using * environment variables or defaults for all other connection parameters. */ if (argc >1) conninfo = argv[1]; else conninfo = "dbname = postgres"; /* Make a connection to the database */ conn = PQconnectdb(conninfo); /* Check to see that the backend connection was successfully made */ if (PQstatus(conn) != CONNECTION_OK) < fprintf(stderr, "Connection to database failed: %s", PQerrorMessage(conn)); exit_nicely(conn); >/* * Our test case here involves using a cursor, for which we must be inside * a transaction block. We could do the whole thing with a single * PQexec() of "select * from pg_database", but that's too trivial to make * a good example. */ /* Start a transaction block */ res = PQexec(conn, "BEGIN"); if (PQresultStatus(res) != PGRES_COMMAND_OK) < fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); >/* * Should PQclear PGresult whenever it is no longer needed to avoid memory * leaks */ PQclear(res); /* * Fetch rows from pg_database, the system catalog of databases */ res = PQexec(conn, "DECLARE myportal CURSOR FOR select * from pg_database"); if (PQresultStatus(res) != PGRES_COMMAND_OK) < fprintf(stderr, "DECLARE CURSOR failed: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); >PQclear(res); res = PQexec(conn, "FETCH ALL in myportal"); if (PQresultStatus(res) != PGRES_TUPLES_OK) < fprintf(stderr, "FETCH ALL failed: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); >/* first, print out the attribute names */ nFields = PQnfields(res); for (i = 0; i < nFields; i++) printf("%-15s", PQfname(res, i)); printf("\n\n"); /* next, print out the rows */ for (i = 0; i < PQntuples(res); i++) < for (j = 0; j < nFields; j++) printf("%-15s", PQgetvalue(res, i, j)); printf("\n"); >PQclear(res); /* close the portal . we don't bother to check for errors . */ res = PQexec(conn, "CLOSE myportal"); PQclear(res); /* end the transaction */ res = PQexec(conn, "END"); PQclear(res); /* close the connection to the database and cleanup */ PQfinish(conn); return 0; > 

Как подключить postgresql к c

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

36.2.1. Подключение к серверу баз данных #

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

EXEC SQL CONNECT TO цель-подключения [AS имя-подключения] [USER имя-пользователя];

Цель может задаваться следующими способами:

  • имя_бд [ @ имя_сервера ][ : порт ]
  • tcp:postgresql:// имя_сервера [ : порт ][ / имя_бд ][ ? параметры ]
  • unix:postgresql://localhost[ : порт ][ / имя_бд ][ ? параметры ]
  • строковая константа SQL, содержащая одну из вышеприведённых записей
  • ссылка на символьную переменную, содержащую одну из вышеприведённых записей (см. примеры)
  • DEFAULT

С целью подключения DEFAULT устанавливается подключение к базе данных по умолчанию с именем пользователя по умолчанию. Другое имя пользователя или имя подключения в этом случае указать нельзя.

Если цель подключения задаётся буквально (не в виде текстовой строки и не через переменную), её компоненты разбираются как обычные элементы SQL; это означает, например, что имя_сервера должно выглядеть как один или несколько идентификаторов SQL, разделённых точками, и если они не заключены в кавычки, они будут приведены к нижнему регистру. Значения любых параметров должны быть идентификаторами SQL, целыми числами или ссылками на переменные. Разумеется, практически любую строку можно сделать идентификатором SQL, заключив её в кавычки. На практике же, во избежание ошибок, предпочтительнее использовать текстовые строки (в апострофах) или ссылки на переменные.

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

  • имя_пользователя
  • имя_пользователя / пароль
  • имя_пользователя IDENTIFIED BY пароль
  • имя_пользователя USING пароль

В показанных выше строках имя_пользователя и пароль могут задаваться идентификатором или строковой константой SQL, либо ссылкой на символьную переменную.

Если указание цели подключения включает какие-либо параметры , они должны записываться в виде имя = значение и разделяться амперсандами ( & ). В качестве имён параметров принимаются те же, что поддерживает libpq (см. Подраздел 34.1.2). Перед элементами имя или значение пробелы игнорируются, но сохраняются внутри или после этих элементов. Заметьте, что записать & внутри значения нет никакой возможности.

Обратите внимание, что при указании соединения через сокет (с префиксом unix: ) имя сервера обязательно должно быть localhost . Чтобы выбрать нестандартный каталог сокета, укажите путь к каталогу как значение параметра host в списке параметров в строке цели.

Указание имя-подключения применяется, когда в одной программе нужно использовать несколько подключений. Его можно опустить, если программа работает только с одним подключением. Соединение, открытое последним, становится текущим и будет использоваться по умолчанию при выполнении SQL-операторов (это описывается далее в этой главе).

Вот некоторые примеры оператора CONNECT :

EXEC SQL CONNECT TO mydb@sql.mydomain.com; EXEC SQL CONNECT TO tcp:postgresql://sql.mydomain.com/mydb AS myconnection USER john; EXEC SQL BEGIN DECLARE SECTION; const char *target = "mydb@sql.mydomain.com"; const char *user = "john"; const char *passwd = "secret"; EXEC SQL END DECLARE SECTION; . EXEC SQL CONNECT TO :target USER :user USING :passwd; /* or EXEC SQL CONNECT TO :target USER :user/:passwd; */

В последней форме используется вариант, названный выше ссылкой на символьную переменную. В последующих разделах вы узнаете, как в SQL-операторах можно использовать переменные C, приставляя перед именем двоеточие.

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

Если к базе данных, которая не приведена в соответствие шаблону безопасного использования схем, имеют доступ недоверенные пользователи, начинайте сеанс с удаления схем, доступных всем для записи, из пути поиска ( search_path ). Например, добавьте options=-c search_path= в options или выполните EXEC SQL SELECT pg_catalog.set_config(‘search_path’, », false); после подключения. Это касается не только ECPG, но и любых других интерфейсов для выполнения произвольных SQL-команд.

36.2.2. Выбор подключения #

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

Первый вариант — явно выбирать подключение для каждого SQL-оператора, например, так:

EXEC SQL AT имя-подключения SELECT . ;

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

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

Второй вариант — выполнять оператор, переключающий текущее подключение. Этот оператор записывается так:

EXEC SQL SET CONNECTION имя-подключения;

Этот вариант особенно удобен, когда с одним подключением нужно выполнить несколько операторов.

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

#include EXEC SQL BEGIN DECLARE SECTION; char dbname[1024]; EXEC SQL END DECLARE SECTION; int main() < EXEC SQL CONNECT TO testdb1 AS con1 USER testuser; EXEC SQL SELECT pg_catalog.set_config('search_path', '', false); EXEC SQL COMMIT; EXEC SQL CONNECT TO testdb2 AS con2 USER testuser; EXEC SQL SELECT pg_catalog.set_config('search_path', '', false); EXEC SQL COMMIT; EXEC SQL CONNECT TO testdb3 AS con3 USER testuser; EXEC SQL SELECT pg_catalog.set_config('search_path', '', false); EXEC SQL COMMIT; /* This query would be executed in the last opened database "testdb3". */ EXEC SQL SELECT current_database() INTO :dbname; printf("current=%s (should be testdb3)\n", dbname); /* Using "AT" to run a query in "testdb2" */ EXEC SQL AT con2 SELECT current_database() INTO :dbname; printf("current=%s (should be testdb2)\n", dbname); /* Switch the current connection to "testdb1". */ EXEC SQL SET CONNECTION con1; EXEC SQL SELECT current_database() INTO :dbname; printf("current=%s (should be testdb1)\n", dbname); EXEC SQL DISCONNECT ALL; return 0; >

Этот пример должен вывести следующее:

current=testdb3 (should be testdb3) current=testdb2 (should be testdb2) current=testdb1 (should be testdb1)

Третий вариант заключается в объявлении идентификатора SQL, связанного с подключением. Например:

EXEC SQL AT имя-подключения DECLARE имя-оператора STATEMENT; EXEC SQL PREPARE имя-оператора FROM :динамическая-строка;

Связанный с подключением SQL-идентификатор затем нужно выполнять без предложения AT. Обратите внимание, что этот вариант действует как директивы препроцессора, поэтому это связывание будет работать только в рамках файла.

Следующий пример программы демонстрирует использование данного варианта:

#include EXEC SQL BEGIN DECLARE SECTION; char dbname[128]; char *dyn_sql = «SELECT current_database()»; EXEC SQL END DECLARE SECTION; int main()

Этот пример должен вывести следующее, даже если подключение по умолчанию установлено к базе testdb:

postgres

36.2.3. Закрытие подключения #

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

EXEC SQL DISCONNECT [подключение];

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

Если имя подключения не задано, закрывается текущее подключение.

Хорошим стилем считается, когда приложение явно закрывает каждое подключение, которое оно открыло.

Пред. Наверх След.
36.1. Концепция Начало 36.3. Запуск команд SQL

Подключение к базе данных PostgreSQL

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

На этой странице

  • Базовое подключение
  • Подключение с помощью SSL-сертификата

Для подключения к экземпляру БД можно использовать клиентский psql для базового подключения или SSL-соединения. Рекомендуется использовать SSL-соединение.

Для подключения необходимы:

  • Привязанный к экземпляру БД внешний IP-адрес.
  • Установленный клиент PostgreSQL psql на ECS.

Базовое подключение

  1. Подключитесь к экземпляру виртуальной машины ECS , где развернут экземпляр RDS.
  2. Запустите следующую команду для подключения к базе данных RDS:
psql --no-readline -U user> -h host> -p port> -d datastore> -W 
  • -U — имя пользователя экземпляра базы данных RDS. По умолчанию — root .
  • -h — IP-адрес экземпляра первичной БД. Получить этот IP-адрес можно на странице Instance Management , нажав на название экземпляра БД.
  • через ECS, то IP-адрес можно найти на вкладке Basic Information разделе Connection Information → Floating IP Address .
  • через EIP, то адрес IP будет располагаться на вкладке EIPs .
  • -p — использующийся порт для базы данных. По умолчанию значение порта — 5432. Номер порта можно получить на странице Instance Management , нажав на нужный экземпляр RDS и перейдя в раздел Connection Information → Database Port .
  • -d — название БД. По умолчанию название будет «postgres».
  • -W — запрос пароля, который нужно будет указать при подключении. После запуска этой команды будет запрашиваться пароль.
psql --no-readline -U root -h 192.168.0.44 -p 5432 -d postgres -W 

Подключение с помощью SSL-сертификата

  1. Войдите в консоль управления Advanced.
  • Инструкция по входу с помощью личного кабинета Cloud.ru
  • Инструкция по входу в консоль для IAM-пользователей

Запустите команду для подключения к экземпляру. В нашем примере используется команда для Linux:

psql --no-readline -h host> -p port> "dbname= user= sslmode=verify-ca sslrootcert=" 

-h — IP-адрес экземпляра первичной БД. Получить этот IP-адрес можно на странице Instance Management , нажав на название экземпляра БД.

Если подключение осуществляется:

  • через ECS, то IP-адрес можно найти на вкладке Basic Information разделе Connection Information → Floating IP Address .
  • через EIP, то адрес IP будет располагаться на вкладке EIPs .

Например, чтобы подключиться к экземпляру базы данных через SSL-соединение от имени пользователя root, выполните следующую команду:

psql --no-readline -h 192.168.0.44 -p 5432 "dbname=postgres user=root sslmode=verify-ca sslrootcert=/root/ca.pem" Password: 

Если успешно установлено SSL-соединение, то отобразится сообщение:

SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) 

Как подключить postgresql к c

PgAdmin — это инструмент управления с открытым исходным кодом для баз данных, входящий в загрузку PostgreSQL. Этот инструмент предлагает полную поддержку Юникода, быструю, многопоточную обработку запросов и инструменты редактирования, а также поддержку всех типов объектов PostgreSQL.

4. Создание нового пользователя.
a. Щелкните правой кнопкой мыши PostgreSQLx.x (🙂 . Пример: PostgreSQLx.x(localhost:5432)

b. Выберите New Object > New Login Role . На вкладке Properties в поле Role name введите наименование роли пользователя PostgreSQL для администрирования PostgreSQL.

c. На вкладке Definition введите в поле Password уникальный и надежный пароль для администрирования PostgreSQL (появится подсказка, что нужно ввести его дважды).

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

5. Нажмите кнопку ОК . Запомните наименование роли пользователя, созданное на этом шаге, для дальнейшего использования.

Конфигурирование базы данных PostgreSQL, расположенной на отдельном сервере, а не на сервере ThingWorx

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

По умолчанию сервер PostgreSQL устанавливается в заблокированном состоянии. Сервер будет прослушивать соединения только с локального компьютера. Чтобы ThingWorx взаимодействовал с сервером PostgreSQL, необходимо внести некоторые изменения в конфигурацию так, чтобы PostgreSQL знал о прослушивании соединений от других пользователей (пользователь ThingWorx, значение по умолчанию: twadmin) и/или от других компьютеров (ThingWorx, установленный на отдельном сервер).

Для выполнения этих шагов необходимо знать, где находится каталог данных PostgreSQL. Для Windows папка данных по умолчанию: C:\Program Files\PostgreSQL\x.x\data .

Измените файл pg_hba.conf и добавьте в зависимости от нужной конфигурации следующие строки:
Если нужно разрешить соединение со всех адресов IPv4:
host all all 0.0.0.0/0 md5

Если нужно разрешить подключение только с определенного адреса IPv4 (замените < ipAddress >IP-адресом компьютера, осуществляющего подключение):

host all all /32 md5
Если нужно разрешить подключение со всех адресов IPv6:
host all all ::0/0 md5

Если нужно разрешить подключение только с определенного адреса IPv6 (замените соответствующим адресом):

host all all /128 md5

Возможна любая другая комбинация, если использовать дополнительные строки разрешений (для отдельных IP-адресов или их диапазонов) или маски подсети, соответствующие компьютерам, которым требуется доступ к базе данных PostgreSQL.

После любого изменения этого файла требуется перезапуск сервиса базы данных.
Конфигурирование и выполнение сценария базы данных PostgreSQL

Чтобы настроить базу данных и область таблицы PostgreSQL, необходимо сконфигурировать и выполнить сценарий thingworxPostgresDBSetup .

1. Добавьте папку <папка-установки-postgres>/bin в системную переменную PATH .

2. Создайте папку с наименованием ThingworxPostgresqlStorage на диске, на котором находится папка ThingworxStorage (по умолчанию — в корневом каталоге). Обратите внимание на следующее.

◦ При создании папки с помощью команды -d не нужно использовать пользователя PostgreSQL.

◦ Необходимо указать для опции -l существующий путь. Например, -l D:\ThingworxPostgresqlStorage . В этом сценарии ваша папка не создается.

◦ Для этой папки должен существовать владелец и должны быть заданы соответствующие права доступа. Владельцем этой папки должен быть тот же пользователь, который запускает сервис PostgreSQL, и которому назначены права Full Control; обычно это пользователь NETWORK_SERVICE, но в вашей среде он может быть другим.

4. Если необходимо, сконфигурируйте сценарий. Используйте опции из приведенной ниже таблицы.
Опции сценария thingworxPostgresDBSetup
По умолчанию
tablespace
Наименование области таблицы
-t thingworx
Номер порта PostgreSQL
Наименование создаваемой базы данных PostgreSQL
-d thingworx
Имя хост-компьютера.
-h localhost
tablespace_location
/ThingworxPostgresqlStorage
Требуется. Расположение в файловой системе, где хранятся файлы, представляющие объекты базы данных.
adminusername
Имя администратора
-a postgres
thingworxusername
Имя пользователя, имеющего разрешения на запись в базу данных.
5. Выполните сценарий.
Конфигурирование и выполнение сценария схемы поставщика моделей/данных

Чтобы настроить схему поставщика моделей/данных PostgreSQL, необходимо сконфигурировать и выполнить сценарий thingworxPostgresSchemaSetup . Это позволит настроить общедоступную схему в вашей базе данных для экземпляра PostgreSQL, установленного на локальном компьютере localhost.

2. Если необходимо, сконфигурируйте сценарий. Используйте опции из приведенной ниже таблицы.
Опции сценария thingworxPostgresSchemaSetup
По умолчанию
IP-адрес или наименование хост-компьютера базы данных.
-h localhost
Номер порта PostgreSQL.
Наименование базы данных, которую необходимо использовать.
-d thingworx
Наименование схемы, которую необходимо использовать.
-s mySchema
Имя пользователя для обновления схемы базы данных
Имеются три опции.
• all — настройка схем поставщиков моделей и данных в указанной базе данных.
• model — настройка схемы поставщика моделей в указанной базе данных.
• data — настройка схемы поставщика данных в указанной базе данных.
3. Выполните сценарий.
Конфигурирование файла platform-settings.json

1. Создайте папку ThingworxPlatform в корневом каталоге диска, на котором была установлена Tomcat, или задайте системную переменную среды, которая указывает на эту папку. Обратите внимание на следующее.

◦ Чтобы указать расположение, в котором хранятся настройки ThingWorx, задайте необходимое расположение как значение переменной среды THINGWORX_PLATFORM_SETTINGS . Убедитесь, что папка, на которую ссылается переменная THINGWORX_PLATFORM_SETTINGS , существует и доступна для записи пользователю Tomcat. Эта переменная среды должна быть сконфигурирована в наборе системных переменных среды.

◦ Невозможно будет запустить сервер ThingWorx, если он не будет иметь права на чтение и запись в этой папке.

2. Поместите файл platform-settings.json в папку ThingworxPlatform . Этот файл доступен на сайте загрузки программного обеспечения.

Если сервер PostgreSQL не совпадает с сервером ThingWorx, то при возникновении проблем, связанных с установкой ThingWorx, просмотрите журналы Tomcat и файл platform-settings.json . При стандартной установке предполагается, что оба сервера находятся на одном и том же компьютере.

(Необязательно) Шифрование пароля PostgreSQL
(Необязательно) Установка пакета клиента PostgreSQL и пользователя PostgreSQL

Чтобы выполнить команды PostgreSQL на компьютере клиента для сервера PostgreSQL, выполняйте их от имени пользователя PostgreSQL. Пакет postgresql-client-x.x можно установить на клиентском компьютере. Инструкции по установке см. в документации по дистрибутиву PostgreSQL. Этот пакет содержит некоторые инструменты администрирования, такие как psql .

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

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