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-адрес сервера (в локальной сети), программа просто останавливается. Нет ошибок или предупреждений. Я понятия не имею, что происходит.

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

  1. я запускаю программу с рабочей станции в той же локальной сети, что и сервер.
  2. Обе машины работают под управлением Ubuntu 12.04 Desktop
  3. Я могу получить доступ к базе данных postgres на сервере с помощью PGAdmin III, так что я полагаю, что это не проблема брандмауэра.
  4. Я позволил postgresql из UFW и UFW отключен.
  5. Странно, когда брандмауэр отключен, я могу 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)

Я также узнал, что параметры чувствительны к регистру, и мне пришлось написать "порт" ("Порт" не работает).

Другие вопросы по тегам