Программное управление источниками данных ODBC
Тема нашего сегодняшнего разговора — ODBC. Если вы хоть раз писали СУБД (системы управления базами данных), то вам, наверное, знакома эта аббревиатура. Расшифровывается ODBC как Open DataBase Connectivity (вольный перевод — открытая система связи с базами данных). Open (открытая) в данном случае означает «расширяемая», «легко наращиваемая», «открытая для модификаций». Вы сами это поймете, если посмотрите на архитектуру построения ODBC:
Как легко заметить, она действительно легко наращиваемая. Для добавления нового типа БД нужно лишь написать драйвер и зарегистрировать его. Еще одно преимущество, вытекающее из такого построения ODBC — пользовательское приложение общается с физической БД через менеджер драйверов, фактически ничего не зная о типе используемой БД (общение менеджера драйверов и самих драйверов более менее стандартно, так что с точки зрения пользователя все источники данных обладают практически одинаковыми свойствами). Таким образом, вы легко можете поменять физический тип базы данных, а приложение даже не узнает об этом (конечно, существуют исключения из-за особенностей поддержки языка SQL различными типами БД, но они несущественны).
Анализ отработанного моторного масла, что это такое? Личное мнение.
Физически ODBC представляет собой набор динамических библиотек DLL, которые обслуживают подключение и работу с конкретным типом базы данных.При запросе на подключение к определенной, заранее описанной базе «активизируется» определенная DLL — драйвер этого типа БД. Обращение к определенной базе данных происходит по имени так называемого источника данных ODBC (или DSN — data source name). Можно представить DSN как своего рода объявление БД на данном компьютере, причем DSN может быть пользовательским, т.е. находится в области видимости только одного польователя, в сеансе которого был создан этот DSN, и системным, т.е. видимым всеми пользователями данного компьютера.
Управление источниками данных ODBC (да и вообще настройкой всей системы ODBC) осуществляется с помощью специальной программы — ODBC-администратора. Давайте разберем, где его можно найти в различных версиях Windows:
— Windows 9х — сам исполняемый файл odbcad32.exe лежит в каталоге WindowsSystem. Запускать его можно напрямую либо через Панель управления (значок «Источники данных ODBC (32-бит)»). Если на компьютере установлен BDE, запустите администратор BDE и из меню Object выберите пункт ODBC Administrator.
— Windows 2000 — исполняемый файл odbcad32.exe лежит в каталоге WinNTSystem32, а запускать его можно через Панель управления -> Администрирование -> Источники данных ODBC. К сожалению, у меня нет возможности проверить, как с ODBC в NT3.51 / 4 — не думаю, что там ребята из Microsoft сильно его спрятали.
Почему ODBC?
Ведь есть же BDE, скажете вы. Да, возможно вы правы. Однако здесь есть «но». У обоих движков есть свои преимущества и недостатки. ODBC намного лучше работает с «родными, от Microsoft» источниками данных продуктов Microsoft Office — типа Access, Excel, MS SQL Server (вообще-то из-за Access я и затеял всю эту писанину).
Работа с приложением Evernote на смартфоне
Кроме того, в стандартный дистрибутив BDE, который можно на каждом шагу найти в Интернете, я что-то ни разу не встречал SQL Links, впрочем, как я ни разу не встречал и отдельного дистрибутива SQL Links. А именно после установки SQL Links в BDE появлется возможность создавать алиасы к Access, MS SQL Server, Oracle и др. типам баз данных. Устанавливать же полную версию C++Builder или Delphi на компьютер пользователя может не каждый. А ODBC на «голой» машине уже содержит драйверы Access, Excel, FoxPro и SQL Server. В общем, для общего развития не помешает освоить и ODBC, тем более что access’овские базы, с которыми мы будем работать через ODBC, очень надежны (не в пример стандартным BDE’шным paradox’овым, у которых то и дело сыпятся индексы, а про такое поле как счетчик я вообще молчу), практически на любом компьютере пользователя установлен Office, что позволяет вносить коррективы «на месте», да и удобство всей базы в одном файле тоже иногда сказывается.
Фнукции, с которыми нам придется работать
Естественно, я не буду рассказывать обо всех функциях, с помощью которых можно сделать с ODBC все, что угодно. Поверьте, их очень много. Нам же для нашей практической задачи достаточно будет всего четырех:
1. Функция SQLDataSources возвращает список всех источников данных ODBC.
RETCODE SQLDataSources(HENV hEnv, UWORD fDirection, UCHAR * szDSN, SWORD cbDSNMax, SWORD *pcbDSN, UCHAR * szDescription, SWORD cbDescriptionMax, SWORD * pcbDescription );
- hEnv — хэндл, возвращаемый функцией SQLAllocEnv();
- fDirection — задает режим работы. Может принимать значения SQL_FETCH_FIRST — вернуть первую запись и SQL_FETCH_NEXT — вернуть следующую запись. Логика работы аналогична функциям FindFirst и FindNext (помните DOS?);
- szDSN — указатель на буфер длиной не менее cbDSNMax, куда будет записано имя источника данных;
- cbDSNMax — длина буфера szDSN;
- pcbDSN — указатель на целое, куда записывается реальная длина (не включая завершающий ) принятого имени источника данных;
- szDescription — указатель на буфер длиной как минимум 255 символов, куда запистывается описание принятого источника данных;
- cbDescriptionMax — длина буфера szDescription;
- pcbDescripton — указатель на целое, куда записывается реальная длина описания источника данных.
2. Функция SQLConfigDataSources добавляет, изменяет или удаляет указанный источник данных.
BOOL SQLConfigDataSources(HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes)
- hwndParent — хэндл родительского окна. Если не равен NULL, отображается стандартный для данного типа источника данных диалог настройки.
- fRequest — тип запрашиваемой операции. Может принимать следующие значения:
- ODBC_ADD_DSN (ODBC_ADD_SYS_DSN) — запрос на создание нового пользовательского (системного) источника данных;
- ODBC_CONFIG_DSN (ODBC_CONFIG_SYS_DSN) — запрос на изменение существующего пользовательского (системного) источника данных;
- ODBC_REMOVE_DSN (ODBC_REMOVE_SYS_DSN) — удаление пользовательского (системного) источника данных.
Приведем несколько примеров строки атрибутов, чтобы вам было понятно, что это такое:
«DSN=MySource UID=MyLogin PWD=MyPass» — источник данных с именем MySource, логин — MyLogin, пароль — MyPass
Каждый драйвер «понимает» свои ключевые слова, чаще всего применяются:
PWD — пароль UID — логин DSN — имя источника данных DATABASE — имя базы данных SERVER — имя сервера, на котором находится база данных
Для баз данных Microsoft Access для указания имени БД вместо DATABASE используется ключевое слово DBQ.
3. Функция SQLAllocEnv создает новый хэндл для использования в других функциях и инициализирует интерфейс для работы с ODBC
RETCODE SQLAlocEnv(HENV * hEnv)
hEnv — указатель на переменную, которая будет хранить созданный хэндл в случае удачного выполнения функции
4. Функция SQLFreeEnv удаляет заданный хэндл и освобождает всю память, ассоциированную с ним.
RETCODE SQLFreeEnv(HENV hEnv)
- hEnv — хэндл, который нужно удалить
Исходный код
Сначала несколько замечаний. В C++Builder есть заголовочные файлы для работы с ODBC. Нам нужно два из них — odbcinst.h и sql.h. Добавьте строки
#include #include
в начало вашего файла. Реализация функций, описанных в этих файлах, находится в нескольких DLL, лежащих в каталоге WindowsSystem (или WinNTSystem32). В наших примерах будут использоваться две такие DLL, а именно odbc32.dll и odbccp32.dll. Чтобы подключить их к проекту, нужно проделать следующие шаги:
1. Запускаем любой досовский файл-менеджер или командную строку Windows и переходим в каталог WindowsSystem (WinNTSystem32) и находим эти две библиотеки.
2. Если каталог BIN С++Builder’а прописан в переменной окружения PATH, просто набираем
c:windowssystem> implib odbc32.lib odbc32.dll
иначе набираем полностью путь к файлу implib.exe, либо копируем его в каталог, прописанный в PATH.
3. То же самое проделываем с odbccp32.dll:
c:windowssystem> implib odbccp32.lib odbccp32.dll
4. Полученные .lib — файлы копируем в каталог с проектом
5. Из меню Project выбираем пункт Add to Project. и поочередно добавляем odbc32.lib и odbccp32.lib.
Все, теперь система сама загрузит эти DLL во время запуска программы.
Пример 1: Получаем список уже созданных источников данных ODBC.
const short SQL_MAX_DSN_LENGTH=255; UCHAR szDSN[ SQL_MAX_DSN_LENGTH+1 ]; UCHAR szDescription[ 256 ]; short wDSNLen; short wDesLen; int retCode; SQLHENV hEnv=NULL; AnsiString DSNName; SQLAllocEnv( retCode = SQLDataSources( hEnv, SQL_FETCH_FIRST, szDSN, SQL_MAX_DSN_LENGTH+1, wDesLen ); while( retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO ) < DSNName = (AnsiString)((char *)szDSN); // — получили имя DSN в переменной DSNName retCode = SQLDataSources( hEnv, SQL_FETCH_NEXT, szDSN, SQL_MAX_DSN_LENGTH+1, wDesLen ); >SQLFreeEnv( hEnv );
Этот фрагмент кода просто перебирает все уже созданные источники данных. В первой строке фрагмента после объявления переменных создается хэндл текущего сеанса работы с ODBC, затем выбирается первое имя DSN. Если первое имя успешно прочитано (retCode содержит константу SQL_SUCCESS), то в цикле выбирается следующий DSN и т.д. до тех пор, пока не будет прочитан последний DSN. Если на место комментария вставить код (ListBox1 -> Items -> Add(DSNName)), добавляющий прочитанное имя в ListBox, например, то вы сможете просмотреть весь этот список. А если на место комментария вставить что-нибудь типа
if (DSNName==’OurDSN’) .
то мы проверим, сможет ли наша программа работать нормально.
Пример 2: Создаем новый источник данных.
В этом примере вы узнаете, как создать системный DSN для базы данных Access. Предположим, файл с БД лежит в том же каталоге, что и программа, а его имя — db1.mdb.
#include WORD fRequest = ODBC_ADD_SYS_DSN; UCHAR lpszDriver[] = «Microsoft Access Driver (*.mdb)»; UCHAR lpszAttributes[255] = «DSN=c2a;DBQ=»; bool retCode; AnsiString CurDir; CurDir = GetCurrentDir(); StrCat(lpszAttributes, CurDir.c_str()); StrCat(lpszAttributes, «\db1.mdb»); retCode = SQLConfigDataSource(NULL, fRequest, lpszDriver, lpszAttributes); if (retCode == true) Application -> MessageBox(«DSN успешно создан», «Сообщение», MB_OK); else < Application ->MessageBox(«Произошла ошибка во время создания DSN», «Ошибка», MB_OK); >
Как видите, здесь уже не нужны хэндлы и код достаточно ясный. В первых трех строках — дописываем в строку атрибутов путь к файлу БД. Затем собственно создаем источник. Обработка ошибок тривиальна.
Важное замечание: При создании DSN если такое имя уже есть, то не возвращается ошибка, а создается DSN с текущими параметрами.
Пример 3: Как все это собрать воедино и использовать в программе
Здесь кода не будет, здесь будет описание. Итак, у нас есть программа, которой нужно «присоединиться» к базе Microsoft Access, лежащей совсем рядом, в текущем каталоге. На машине пользователя нам не нужно ничего, кроме стандартного набора bpl и BDE. Но — теперь не нужны SQL Links, можно использовать, например, Install Shield, можно взять отдельный дистрибутив BDE. Поехали:
1. На основную форму проекта кидаем компоненту TDatabase. Устанавливаем ее свойства: LoginPrompt — false, DatabaseName — dbMain, AliasName — c2a (имя источника данных ODBC). Во всех компонентах TQuery или TTable свойство Database Name будет равно dbMain. Конечно, можно не использовать компоненту TDatabase, а в TQuery или TTable прямо указывать имя источника данных ODBC, но представьте, если вы написаи проект формочек на двадцать-тридцать, а потом решили, что имя источника ‘MySuperDSN’ не в полной мере отражает всю вашу крутость 🙂 Изменять свойство у полусотни компонент — очень муторное занятие, поверьте.
2. В конструкторе основной формы прописываем код примера №1, вставляя на место комментария следующий код:
if (t == «c2a»)
а после цикла — такой фрагмент:
if (!Exists)
3. Функция NewDSN() полностью повторяет код примера №2.
Теперь при первом запуске программы будет создан источник данных ODBC Microsoft Access с именем c2a, ссылающийся на файл db1.mdb, лежащий в том же каталоге, что и программа.
4. На всякий непредвиденный случай (если вы переместили программу в другой каталог, поменялась буква диска или сетевое имя, где лежит база данных) можно в программе предусмотреть немедленное перезаписывание DSN по горячей клавише, что-то типа такого:
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD if (Shift.Contains(ssAlt) Shift.Contains(ssCtrl)) if (Key==VK_F1) < if (Application ->MessageBox(«Перезаписать DSN?», «Вопрос»,MB_YESNO)==IDYES) < NewDSN(); >> >
Здесь для перезаписи DSN используется комбинация Alt-Ctrl-F1
Источник: codenet.ru
Что такое » psqlodbc.dll » ?
В нашей базе содержится 5 разных файлов с именем psqlodbc.dll . You can also check most distributed file variants with name psqlodbc.dll. Чаще всего эти файлы принадлежат продукту Microsoft Open Database Connectivity. Наиболее частый разработчик — компания PostgreSQL Global Development Group. Самое частое описание этих файлов — PostgreSQL Driver. Этот файл — динамически подключаемая библиотека.
Такая библиотека может загружаться и выполняться любым работающим процессом.
Подробности о наиболее часто используемом файле с именем «psqlodbc.dll»
Продукт: Microsoft Open Database Connectivity Компания: PostgreSQL Global Development Group Описание: PostgreSQL Driver Версия: 8.0.1.1 MD5: 09c8b52fa46ae73ca3a956fba8221ba2 SHA1: ca7f22052a2c3c973b6f36edccd0badc200e8d09 SHA256: 63cc05c928356ee135e2a504cf8cee2732ef753e2a00eedae2fde6588c262196 Размер: 356352 Папка: C:WindowsSystem32 ОС: Windows XP Частота: Низкая
Проверьте свой ПК с помощью нашей бесплатной программы
System Explorer это наша бесплатная, удостоенная наград программа для быстрой проверки всех работающих процессов с помощью нашей базы данных. Эта программа поможет вам держать систему под контролем.
Библиотека «psqlodbc.dll» безопасная или опасная?
Последний новый вариант файла «psqlodbc.dll» был обнаружен 3718 дн. назад. В нашей базе содержится 3 шт. вариантов файла «psqlodbc.dll». У всех этих вариантов пока нет окончательных оценок.
Комментарии пользователей для «psqlodbc.dll»
У нас пока нет комментариев пользователей к файлам с именем «psqlodbc.dll».
Добавить комментарий для «psqlodbc.dll»
Для добавления комментария требуется дополнительная информация об этом файле. Если вам известны размер, контрольные суммы md5/sha1/sha256 или другие атрибуты файла, который вы хотите прокомментировать, то вы можете воспользоваться расширенным поиском на главной странице .
Если подробности о файле вам неизвестны, вы можете быстро проверить этот файл с помощью нашей бесплатной утилиты. Загрузить System Explorer.
Проверьте свой ПК с помощью нашей бесплатной программы
System Explorer это наша бесплатная, удостоенная наград программа для быстрой проверки всех работающих процессов с помощью нашей базы данных. Эта программа поможет вам держать систему под контролем. Программа действительно бесплатная, без рекламы и дополнительных включений, она доступна в виде установщика и как переносное приложение. Её рекомендуют много пользователей.
Источник: systemexplorer.net
Настройка PostgreSQL ODBC в Windows
У меня есть последняя 64-битная версия PostgreSQL. Я использую Win 7 64 бит. Я установил драйвер ODBC (через начальный установщик), когда я установил PG, и обновил его до последней версии сhttp://www.postgresql.org/ftp/odbc/versions/msi/.
однако, когда я иду на панель управления ODBC и пытаюсь добавить пользовательский DSN, PostgreSQL не указан как сервер.
я следовал инструкциям, данным здесь, но я отметил ссылки датированы.
автор: IamIC
4 ответов
Как я вижу, установщик PostgreSQL не включает 64-битную версию драйвера ODBC, что необходимо в вашем случае. Скачать psqlodbc_09_00_0310-x64.zip и установите его вместо этого. Я проверил, что на Win 7 64 бит и PostgreSQL 9.0.4 64 бит, и это выглядит нормально:
автор: Grzegorz Szpetkowski
установка psqlODBC на 64bit Windows
хотя вы можете установить 32-разрядные драйверы ODBC на Win X64, как обычно, вы не можете настроить 32-разрядные DSNs через обычную панель управления или администратора источника данных ODBC.
Как настроить 32-битные драйверы ODBC на Win x64
настройка ODBC DSN из %SystemRoot%syswow64odbcad32.exe
- Пуск > Выполнить
- Enter: %SystemRoot%syswow64odbcad32.exe
- нажмите return.
- открыть ODBC и выберите на вкладке System DSN.
- Выберите PostgreSQL Unicode
возможно, Вам придется играть с ним и попробовать различные сценарии, думать вне коробки, помните, что это с открытым исходным кодом.
автор: TSMurphy
обратите внимание, что вы должны установить драйвер для версии вашего программного клиента(MS access), а не версии ОС. это означает,что если ваш MS Access является 32-разрядной версией, вы должны установить 32-разрядный драйвер odbc. с уважением
автор: Patrick
сначала вы скачать драйвер ODBC psqlodbc_09_01_0200-x64.zip, затем вы установили его.После этого перейдите в меню Пуск — >программа — >администрирование, затем выберите источник данных ODBC, затем дважды щелкните по тому же, после чего выберите PostgreSQL 30, затем выберите Настроить, затем укажите правильные данные, такие как имя пользователя db Id имя хоста пароль той же базы данных таким образом, вы настроите DSN-соединение.После этого вы проверите, что SSL должен быть разрешен .
вы перейдите на следующую вкладку System DSN, затем выберите Добавить tabthen выберите postgreSQL_ANSI_64X ODBC после того, как вы создали соединение PostgreSQL ODBC.
Источник: askdev.ru
Psqlodbc что это за программа
Поскольку UI Bakery ориентирован на веб, не нужно тратить время на его установку и настройку. Вы можете создать графический интерфейс для своей базы, используя ряд готовых компонентов: таблицы, диаграммы, графики, карты, кнопки, выпадающие списки и т.д. Этот процесс занимает минуты или часы вместо недель ручного кодинга.
Подход с низкоуровневым кодом к управлению базами данных гораздо более экономичен и гибок, чем использование традиционных графических инструментов. Тем не менее, давайте рассмотрим и другие продукты.
1. pgAdmin
pgAdmin – кроссплатформенный графический инструмент с открытым исходным кодом.
- совместим с Linux, Windows, macOS;
- позволяет работать с несколькими серверами одновременно;
- экспорт в CSV;
- планирование запросов;
- возможность отслеживать ваши сеансы, блокировки БД с помощью панели мониторинга;
- ярлыки в редакторе SQL для более удобной работы;
- встроенный отладчик процедурного языка;
- тщательная документация и активное сообщество.
- медленный и не всегда интуитивно понятный пользовательский интерфейс по сравнению с платными конкурентами;
- тяжелый;
- высокий порог вхождения;
- для работы с несколькими базами данных одновременно потребуются продвинутые навыки.
2. DBeaver
DBeaver – инструмент управления PostgreSQL с открытым исходным кодом, поддерживающий коннект к нескольким базам данных.
- кроссплатформенность;
- поддержка более 80 баз данных;
- визуальный конструктор, позволяющий добавлять запросы без навыков работы с SQL;
- несколько представлений данных;
- импорт/экспорт данных в CSV, HTML, XML, JSON, XLS, XLSX;
- повышенная безопасность данных;
- полнотекстовый поиск данных и возможность отображения результатов в виде таблиц/представлений;
- доступен бесплатный тарифный план.
- низкая производительность по сравнению с конкурентами;
- слишком частые обновления, что раздражает;
- после некоторого времени бездействия DBeaver отключается от базы данных.
3. Navicat
Интуитивно понятный (с недавнего времени проприетарный) GUI для Postgres.
- простая и быстрая установка;
- поддержка Windows, Linux, iOS;
- удобный визуальный конструктор SQL;
- автодополнение кода;
- инструмент моделирования данных: управление объектами базы данных, схемами проектирования;
- планировщик заданий: запускайте задания, получайте уведомления о завершении задания;
- синхронизация источников данных;
- импорт/экспорт данных в Excel, Access, CSV и другие форматы;
- защита данных с помощью SSH и SSL;
- использование облачных сервисов Amazon, Google и др.
- низкая производительность GUI;
- высокая цена по сравнению с конкурентами;
- одна лицензия ограничена одной платформой (вам понадобятся 2 отдельные лицензии для PostgreSQL и MySQL);
- множество дополнительных возможностей, требующих времени для изучения.
4. DataGrip
Продвинутая IDE для работы с несколькими базами данных, созданная в JetBrains .
- кроссплатформенность (поддержка Windows, macOS, Linux);
- простая навигация по схеме;
- настраиваемый UI с консолью для обеспечения безопасности выполняемой работы;
- быстрое обнаружение ошибок;
- встроенная система контроля версий;
- поддержка MySQL, SQLite, MariaDB, Cassandra и других;
- отчеты с возможностью их интеграции с диаграммами и графиками;
- автодополнение кода.
- высокая цена;
- высокое потребление оперативной памяти;
- сложный процесс отладки ошибок;
- длинная кривая обучения;
- не предназначен для использования в качестве облачного веб-приложения;
- не подходит для одновременного управления несколькими базами данных.
5. HeidiSQL
Инструмент с GUI и открытым исходным кодом для Postgres (и не только). Пока поддерживается только Windows .
- простая установка, легковесная по сравнению с конкурентами;
- поддержка PostgreSQL, MySQL, Microsoft SQL Server, MariaDB;
- возможность подключения и управления несколькими серверами баз данных в одном окне;
- прямой экспорт SQL из одной базы данных в другую;
- массовый просмотр и редактирование таблиц;
- автодополнение кода и подсветка синтаксиса;
- сообщество с активной поддержкой и регулярные обновы;
- экспорт таблиц и данных в Excel, HTML, JSON, PHP;
- зашифрованное соединение.
- не кроссплатформенное приложение;
- частые проблемы со стабильностью;
- нет отладчика процедурного языка.
6. TablePlus
Программное обеспечение с графическим интерфейсом для управления базами данных SQL и NoSQL. С закрытым исходным кодом.
- высокая производительность;
- настраиваемый UI;
- подсветка синтаксиса;
- высокий уровень безопасности данных обеспечивается за счет сквозного шифрования в соединении.
- часто возникают проблемы с UX при работе с другими базами данных, кроме PostgreSQL;
- недешево, а пробная версия предлагает ограниченную функциональность;
- поддержка клиентов оставляет желать лучшего.
7. OmniDB
Простой открытый инструмент с GUI для PostgreSQL.
- кроссплатформенность (поддержка Windows, Linux, macOS);
- поддержка PostgreSQL, Oracle, MySQL, MariaDB;
- очень отзывчивый и легкий по сравнению с некоторыми альтернативами;
- автозаполнение SQL;
- подсветка синтаксиса;
- возможность создания настраиваемых диаграммы для отображения релевантных метрик БД;
- встроенная отладка.
- не самый лучший вариант, если вы работаете с несколькими базами одновременно;
- отсутствие поддержки и документации.
Заключение: UI Bakery – неочевидный, но мощный вариант
Когда вы выбираете программное обеспечение с GUI , основывайте окончательное решение на нескольких аспектах:
- размер команды;
- используемые ОС;
- тип СУБД;
- количество баз данных, с которыми вы планируете работать.
DBeaver, DataGr i p и HeidiSQL больше подходят для одного человека, работающего с одной базой. Navicat – выбор для команды благодаря возможности совместной работы. Почти все упомянутые инструменты являются кроссплатформенными за исключением HeidiSQL, который поддерживает только Windows.
Низкоуровневая UI Bakery отлично подходит, если вам нужно объединить несколько различных источников данных – будь то базы данных, сторонние инструменты или API.
Похоже, что pgAdmin и другое классическое ПО теряет популярность. Низкоуровневый подход к управлению базами данных позволяет получать гораздо лучшие результаты за меньшее время.
Дополнительные материалы:
- 5 лучших материалов по PostgreSQL
- Работа с PostgreSQL: от полного нуля до полного просветления
- О языке SQL на примере SQLite, MySQL и PostgreSQL
- Как оптимизировать производительность запросов в PostgreSQL
- NoSQL базы данных: хранилища и доступность данных
Источники
Источник: proglib.io