Lazarus + Postgres: неполный стартовый пакет
Я создавал программу на Lazarus Pascal с использованием Postgresql на сервере. Раньше нормально работал со следующими строками для открытия БД.
dbConn:= TPQConnection.Create(nil);
dbConn.HostName := 'localhost';
dbConn.DatabaseName:= 'dbHRS';
dbconn.UserName:='mizk';
dbConn.Password:='123';
dbConn.Open;
if dbConn.Connected Then
OpenHRSDB := true
else
OpenHRSDB := False;
Но как только я переключаюсь с локального хоста на IP-адрес сервера (в локальной сети), программа просто останавливается. Нет ошибок или предупреждений. Я понятия не имею, что происходит.
Вот некоторые связанные детали, которые могут помочь сузить проблему.
- я запускаю программу с рабочей станции в той же локальной сети, что и сервер.
- Обе машины работают под управлением Ubuntu 12.04 Desktop
- Я могу получить доступ к базе данных postgres на сервере с помощью PGAdmin III, так что я полагаю, что это не проблема брандмауэра.
- Я позволил postgresql из UFW и UFW отключен.
- Странно, когда брандмауэр отключен, я могу SSH сервер с терминала, используя рабочую станцию. Но когда он включен, я не могу
Сейчас меня больше всего беспокоит то, почему программа Pascal не работает, когда указан IP-номер, и что это за сообщение в журнале postgres.
Любые вклады действительно ценятся. Спасибо!
Изменить: вот больше информации:
Файл postgresql.conf содержит следующие строки:
listen_addresses = '*'
порт = 5430
Извините... Вот правильный журнал ПОСЛЕ включения регистрации. Файл журнала содержит это после того, как я выключил, перезапустил и запустил мою программу:
2014-03-06 18:28:23 IST LOG: система базы данных была закрыта в 2014-03-06 18:28:22 IST 2014-03-06 18:28:23 IST LOG: соединение получено: host=[local] 2014-03-06 18:28:23 IST LOG: неполный стартовый пакет 2014-03-06 18:28:23 IST LOG: система базы данных готова принимать подключения 2014-03-06 18:28:23 IST LOG: автозапуск запускается 2014-03-06 18:28:24 IST LOG: соединение получено: host=[local] 2014-03-06 18:28:24 IST LOG: соединение разрешено: пользователь = база данных postgres =postgres 2014-03-06 18:28:24 IST LOG: соединение получено: host=[local] 2014-03-06 18:28:24 IST LOG: соединение авторизовано: user= база данных postgres =postgres 2014-03-06 18:28:25 IST LOG: получено соединение: хост = [локальный] 2014-03-06 18:28:25 IST LOG: авторизовано соединение: пользователь = база данных postgres =postgres 2014-03-06 18:28:29 IST LOG: получено соединение: host=[local] 2014-03-06 18:28:29 IST LOG: неполный загрузочный пакет
1 ответ
Я понял, что чего-то не хватает, когда нашел эту ссылку, в которой говорилось о ПОРТЕ: http://lists.lazarus.freepascal.org/pipermail/lazarus/2009-August/044403.html
Поэтому я включил в свой код следующую строку для подключения: dbConn.Params.Text:= 'port=5430';
Я не уверен, является ли это наиболее правильным способом выполнения этой строки подключения, потому что я думал, что в строке подключения могут быть и другие параметры, которые также используются, и вышеуказанный метод может перезаписать эти параметры. По этой причине я поставил это в качестве первой строки.
Так что этот метод сработал для меня.
Есть еще один метод, который я попробовал, но у меня не получилось. Это было использовать метод добавления (dbConn.Params.Append)
Я также узнал, что параметры чувствительны к регистру, и мне пришлось написать "порт" ("Порт" не работает).