Как установить драйвер для postgresql
мне трудно понять, как я должен устанавливать драйвер JDBC для PostgreSQL на моем сервере debian 6.0. Я перевез водителя .jar в следующий каталог:
тогда учебники говорят об использовании этого кода:
однако, поскольку я новичок в postgreSQL, я понятия не имею, где я должен ставить эту строку, или если это даже правильно.
мой вопрос, за исключением перемещения файла jar в это место, что мне делать на самом деле нужно сделать, чтобы установить драйвер JDBC на мою установку postgreSQL?
EDIT: это моя настройка:
сервер 1: Tomcat + SOLR
сервер 2: PostgreSQL с драйвером JDBC
SOLR на сервере 1 запрашивает postgreSQL на сервере 2 через драйвер JDBC
лучше всего установить драйвер PostgreSQL в папку tomcat\lib. Просто скопируйте jar драйвера в PATH_TO_TOMCAT\lib
Не рекомендуется добавлять вещи в системный путь к классам, потому что вы можете закончить в классе loader hell. Вот пример того, как вы оказываетесь в аду jar / classpath.
- предположим, что текущее приложение использует postgres 9.1, и вы устанавливаете драйвер на системном пути к классам
- вы решили запустить другое приложение на этом поле, который говорит с новая версия Постгреса, допустим, версия 9.2
- поскольку вы используете приложение system classpath 2 в конечном итоге будет использовать старый драйвер, потому что системный classpath имеет тенденцию иметь приоритет над classpath приложений, если сценарий запуска приложения не устанавливает CLASSPATH="", чтобы очистить системный classpath или использует пользовательский загрузчик классов, который не выполняет загрузку родительского первого класса.
этот драйвер должен быть на вашем пути к классам. Вы можете использовать эту команду
или вы можете скопировать библиотеку в структуру проекта.
затем вы можете создавать соединения, как говорят учебники.
в вашей IDE (Idea, Eclipse и т. д.) Вам нужно добавить этот путь в качестве библиотеки.
кроме того, вы можете компилировать и выполнять из командной строки, Если вы определяете переменную CLASSPATH, которая включает это.
установить все пакеты:
чтобы установить среду Java для всех пользователей, добавьте / отредактируйте/etc / environment:
Примечание: если вы предпочитаете использовать postgresql-jdbc3, замените /usr/share/java/postgresql-jdbc4.jar с /usr / share / java / postgresql.Джар
проверьте соединение с помощью этого кода:
Примечание: изменение базы данных, пользователя и passwrod с вашей конфигурацией
This section describes how to load and initialize the JDBC driver in your programs.
31.2.1. Importing JDBC
Note: Do not import the org.postgresql package. If you do, your source will not compile, as javac will get confused.
31.2.2. Loading the Driver
Before you can connect to a database, you need to load the driver. There are two methods available, and it depends on your code which is the best one to use.
In the first method, your code implicitly loads the driver using the Class.forName() method. For PostgreSQL , you would use:
This will load the driver, and while loading, the driver will automatically register itself with JDBC .
Note: The forName() method can throw a ClassNotFoundException if the driver is not available.
This is the most common method to use, but restricts your code to use just PostgreSQL . If your code may access another database system in the future, and you do not use any PostgreSQL -specific extensions, then the second method is advisable.
The second method passes the driver as a parameter to the JVM as it starts, using the -D argument. Example:
Now, this method is the better one to use because it allows your code to be used with other database packages without recompiling the code. The only thing that would also change is the connection URL , which is covered next.
One last thing: When your code then tries to open a Connection , and you get a No driver available SQLException being thrown, this is probably caused by the driver not being in the class path, or the value in the parameter not being correct.
31.2.3. Connecting to the Database
The parameters have the following meanings:
The host name of the server. Defaults to localhost. To specify an IPv6 address your must enclose the host parameter with square brackets, for example:
The port number the server is listening on. Defaults to the PostgreSQL standard port number (5432).
The database name.
31.2.4. Closing the Connection
To close the database connection, simply call the close() method to the Connection :
This section describes the steps you need to take before you can write or run programs that use the JDBC interface.
Precompiled versions of the driver can be downloaded from the PostgreSQL™ JDBC web site.
Alternatively you can build the driver from source, but you should only need to do this if you are making changes to the source code. To build the JDBC driver, you need gradle and a JDK (currently at least jdk1.8) .
If you have several Java compilers installed, maven will use the first one on the path. To use a different one set JAVA_HOME to the Java version you wish to use For example, to use a different JDK than the default, this may work:
To compile the driver simply run gradlew assemble or gradlew build if you want to run the tests in the top level directory. Note: if you want to skip test execution, add the option -DskipTests. The compiled driver will be placed in pgjdbc/build/libs/postgresql-MM.nn.pp.jar Where MM is the major version, nn is the minor version and pp is the patch version. Versions for JDBC3 and lower can be found here This is a very brief outline of how to build the driver. Much more detailed information can be found on the github repo
Even though the JDBC driver should be built with Gradle, for situations, where use of Gradle is not possible, e.g., when building pgjdbc for distributions, the pgjdbc Gradle build provides a convenience source release artifact *-src.tar.gz - a Maven based project. The Maven based project contains a version of the JDBC driver with complete functionality, which can be used in production and is still validly buildable within the Maven build environment. The Maven-based project is created with gradlew -d :postgresql:sourceDistribution -Prelease. The produced *-src.tar.gz can be then found in pgjdbc/build/distributions/ directory. JDBC driver can be built from the Maven-based project with mvn package or, when the tests are to be skipped, with mvn -DskipTests package. Prefactored *-src.tar.gz s are released in the Maven central repository.
В этом разделе показано, как подключаться к источникам данных PostgreSQL со страницы Выбор источника данных или Выбор назначения в мастере импорта и экспорта SQL Server.
Подробные требования и необходимые условия для подключения к базе данных PostgreSQL выходят за рамки этой статьи Майкрософт. В ней предполагается, что у вас уже установлено клиентское программное обеспечение PostgreSQL и вы можете успешно подключиться к целевой базе данных PostgreSQL. Для получения дополнительных сведений обратитесь к администратору базы данных PostgreSQL или к документации по PostgreSQL.
Получение драйвера ODBC для PostgreSQL
Установка драйвера ODBC с помощью построителя стека
Запустите построитель стека, чтобы добавить драйвер ODBC для PostgreSQL (psqlODBC) в вашу установку PostgreSQL.
Скачивание последней версии драйвера ODBC
Подключение к PostgreSQL с помощью драйвера ODBC для PostgreSQL (psqlODBC)
Указываемые параметры (драйвер ODBC для PostgreSQL)
Параметры подключения для этого поставщика данных и драйвера ODBC одинаковы независимо от того, является ли PostgreSQL источником или назначением. Таким образом, на страницах Выбор источника данных и Выбор назначения мастера отображаются одинаковые параметры.
Чтобы подключиться к PostgreSQL с помощью драйвера ODBC для PostgreSQL, соберите строку подключения, используя указанные ниже параметры и их значения. Полный формат строки подключения приведен после списка параметров.
Вы можете получить помощь в построении строки подключения. Кроме того, вместо указания строки подключения вы можете предоставить существующее имя DSN (имя источника данных) или создать новое. Дополнительные сведения об этих возможностях см. в разделе Подключение к источнику данных ODBC.
Драйвер
Имя драйвера ODBC — PostgreSQL ODBC Driver(UNICODE) или PostgreSQL ODBC Driver(ANSI).
Server
Имя сервера PostgreSQL.
порт.
Порт, используемый для подключения к серверу PostgreSQL.
База данных
Имя базы данных PostgreSQL.
Uid и Pwd
Uid (идентификатор пользователя) и Pwd (пароль) для подключения.
Формат строки подключения
Ниже приведен формат типичной строки подключения.
Ввод строки подключения
Введите строку подключения в поле ConnectionString либо введите имя DSN в поле Dsn на странице Выбор источника данных или Выбор назначения. После того как вы введете строку подключения, мастер проанализирует ее и отобразит отдельные свойства и их значения в списке.
В приведенном ниже примере используется следующая строка подключения:
Ниже показан экран, который появляется после ввода строки подключения.
Другие поставщики данных и дополнительные сведения
Сведения о подключении к PostgreSQL с помощью поставщика данных, не представленного в этом списке, см. в разделе Строки подключения PostgreSQL. Этот сторонний сайт также содержит дополнительные сведения о поставщиках данных и параметрах подключения, описанных на этой странице.
Тем не менее, для Windows95/98 так и для Windows NT с давних пор существовали ODBC и JDBC драйвера, при использовании которых можно было вполне сносно работать с сервером PostgreSQL , работающим на каком-либо UNIX'е. Далее речь пойдет об ODBC драйверах.
ODBC драйвера и их установка
Это самораспаковывающийся архив в установкой через InstallShield. То есть все, что вам нужно сделать для установки, это скачать данный файл в какой-нибудь временный каталог, а затем запустить его. Данный архив содержит еще и менеджер ODBC драйвера, который я рекомендую вам поставить (вам будет задан соответствующий вопрос во время установки). Однако, для того, чтобы начать работать, установки недостаточно. Вам еще необходимо произвести настройку ODBC через ODBC Administrator, который вызывается из окна Панель управления (Control Panel) под именем 32bit ODBC .
Настройка OBDC драйверов
Итак, запускаем 32bit ODBC . В результате получаем диалоговое окно, следующего вида:
У вас в окне по всей видимости будет пусто. У меня, как видите уже установлен ODBC драйвер для Interbase. Нажимаем кнопку Add. и снова получаем диалоговое окно вида:
Выбираем "PostgreSQL" и нажимаем кнопку Готово . В результате имеем еще одно окно вида:
Поля Database , Server , Username и Password в вашем случае будут пустыми и вам необходимо заполнить их самостоятельно. Тут никаких трудностей возникнуть не должно: Database - база данных, с которой вы будете работать, Server - машина, на которой работает PostgreSQL, Username и Password - соответственно имя пользователя и пароль с использованием которых будет осуществляться подключение к базе данных (это значит, что на сервере с PostgreSQL у вас должен быть заведен пользователь именно с таким именем и паролем).
-
Я установил, что заполнение полей Username и Password не является необходимым. Более того, оно вредно, поскольку Windows хранит эти значения в реестре в PLAIN TEXT. Т.е. любой пионер, который научился пользоваться программой regedit может прочитать ваш пароль!
Параметр Port вам необходимо сменить только в том случае, если вы работаете с нестандартным портом (см. файл /etc/postgresql/postmaster.init на предмет изменения номера порта).
Как видно из рисунка, есть еще две кнопки Driver и DataSource .
При нажатии на кнопку Driver получаем окно вида:
В этом окне я рекомендую установить флажок Recognize Unique Indexes . Если вам нужно протоколирование транзакций, то установите CommitLog(C:\postodbc.log . Понятно, что Read Only надо убрать. Еще я убираю Disable Generic Optimizer . Читайте про то, что обозначают настройки ниже.
При нажатии на кнопку DataSource получаем окно вида:
Сразу же рекомендую убрать флажек ReadOnly . А вот Protocol нужно установить в зависимости от версии PostgreSQL, с которой вы работаете. Я также включаю флажек Show Column , так как он не мешает. Читайте про то, что обозначают настройки ниже.
-
Я установил, что включение флажка Row Versioning приводит к проблеме в Delphi , так как при формировании запросов, Delphi считает, что в любой таблице должно существовать поле xid , чего естественно в реальности нет. Т.е. этот флажок устанавливать не нужно.
Финал
Ну вот собственно и все. Теперь вы можете работать с сервером PostgreSQL , с помощью любой программы в Microsoft Windows, которая знает как общаться через ODBC драйвера.
Замечания по Delphi
Эти два случая из моего опыта работы с PostgreSQL из Delphi.
Первую фичу я обнаружил на методе AppendRecord . Оказывается, чтобы данный метод отработал успешно, нужно первым элементом списка ставить nil , иначе, при выполнении возникнет ошибка. Т.е. теперь AppendRecord будет выглядеть, например так: а не так, как делается, например, при работе с Interbase:
Вторая фича касается какой-то веселой ситуации, возникшей у меня один раз с сервером. По какой-то причине, тот отказывал в обслуживании клиентам. Похоже, это произошло потому, что в этот момент выполнялся какой-то процесс по обслуживанию базы данных на самом сервере.
Симптомом послужило то, что при обращении к PostgreSQL из программы на Deplhi, сама программа весилась намертво. При этом курсор принимал на экране характерную форму при выполнении SQL запроса. Однако этот запрос все продолжал выполняться и продолжал. Через 5 минут мне это надоело и я снял задачу принудительно.
Чем было вызвано зависание программы я даже не знаю. По идее должен был отработать тайм-аут по истечении которого, должна была появиться ошибка, но этого не случилось. Может виновата кривость BDE, может ODBC драйвера.
Вылечилось просто - на сервере был перезапущен PostgreSQL .
Настройка ODBC драйвера PostgreSQL
Диалоговое окно "Driver" в "Advanced Options"
-
Нажмите эту кнопку для восстановления настроек по умолчанию.
-
Автоматически выключает оптимизатор во время соединения. Это удобнее, чем выставлять специальную настройку в параметрах соединения. Данная особенность была добавлена, когда мы заметили, что сервер имеет проблемы при оптимизации некоторых запросов.
-
Данная особенность помогает определенным запросам отрабатываться на сервере не заваливая его. Некоторые приложения, например MS Jet Database Engine используют "keyset" запросы вида: Запросы такого типа будут приводить к заваливанию сервера без KSQO.
-
В данный файл происходит журналирование соединений с сервером. Его хорошо использовать для отладки.
-
Этот флаг управляет результатом вызова SQLStatistics() для уникальных индексов. По умолчанию он не установлен. Это позволяет Access 95 и Access 97 спрашивать пользователя об индексах во время соединения.
-
Новые источники данных будут наследовать состояние "Только для чтения".
-
Если флаг выставлен (по умолчанию это так), то драйвер автоматически использует создание курсора и fetch для управления операторами SELECT, оставляя 100 строк в кэше. В большинстве случаев это сильно помогает, когда вы заинтересованы только в чтении, а не в обновлении. Результаты не занимают много памяти для буферизации всего списка изменений. Если флаг сброшен, то курсор использоваться не будет, а драйвер будет выдавать все данные результата. Для очень больших таблиц, это очень плохо и может привести к тому, что будет использована вся память Windows. Однако, это может более лучшим образом управлять UPDATE, так как таблицы не остаются открытыми, как в случае использования курсора. Тем не менее, из-за более экономного расхода памяти, использование данного флага все равно дает лучшую производительность.
-
Если флаг выставлен, то драйвер будет анализировать операторы запроса SQL для определения колонок и таблиц, а также статистики о них, такой как точность, псевдонимы, нулевые записи и т.д. Все это можно получить через вызовы SQLDescribeCol, SQLColAttributes и SQLNumResultCols. Анализатор корректно определяет колонки, которые являются результатами выражений и функций, не взирая на сложность, но он не пытается определить типы данных или точность для этих колонок.
Читайте также: