1

我一直在後端使用Postgresql構建一個Lazarus Pascal程序。它用於打開數據庫的以下行可以很好地工作。Lazarus + Postgres:不完整的啓動數據包

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桌面
  3. 我可以使用PGAdmin III訪問服務器上的postgres數據庫,所以我猜這不是防火牆問題。
  4. 我已經允許從ufw和ufw postgresql被禁用。
  5. 奇怪的是,當防火牆被禁用時,我可以使用工作站從終端SSH服務器。但是,當它啓用時,我不能

我現在最關心的是爲什麼帕斯卡爾計劃不起作用時,IP號碼給出和postgres日誌中的消息是什麼。

任何輸入真的很感激。謝謝!

編輯:下面是詳細信息:

文件postgresql.conf中包含這些行:

的listen_addresses = '*'
端口= 5430

所以,對不起......這是正確的日誌AFTER連接日誌記錄打開。 日誌文件包含此後我關機,重新啓動並運行我的程序:

2014-03-06 18:28:23 IST日誌:數據庫系統已關閉在2014-03-06 18:28:22 IST 2014年3月6日18時28分23秒IST LOG:連接接收:主機= [本地] 2014年3月6日18時28分23秒IST LOG:不完全啓動包 2014年3月6日18時28分23秒IST LOG:數據庫系統是準備接受連接 2014年3月6日18時28分23秒IST LOG:自動清理啓動器啓動的 2014年3月6日18時28分24秒IST LOG:連接接收:主機= [本地] 2014-03-06 18:28:24 IST日誌:連接授權:用戶= postgres數據庫= postgres 2014-03-06 18:28:24 IST日誌:連接收到:主機= [本地] 2014年3月6日18時28分24秒IST LOG:連接授權:用戶= Postgres數據庫= postgres的 2014年3月6日18點28分25秒IST LOG:連接接收:主機= [本地] 2014-03- 06 18點28分25秒IST LOG:連接授權:用戶= Postgres數據庫= postgres的 2014年3月6日18時28分29秒IST LOG:連接接收:主機= [本地] 2014年3月6日18時28分: 29 IST LOG:不完全啓動包

+0

不確定您提到的觀點是否涵蓋了這一點,但服務器參數[「listen_addresses」](http://www.postgresql.org/docs/9.3/static/runtime-config-connection.html)實例?默認情況下,這是localhost(當你在它的時候,也檢查端口) – DrColossos

+0

@DrColossos yes,listen_addresses設置爲'*'。否則PGAdmin III將無法工作。 – itsols

+0

那麼pg_hba文件呢?那裏的所有參賽作品都是正確的?也許pgAdmin與系統的連接方式與腳本不同? – DrColossos

回答

1

我意識到,缺了點什麼,當我發現這個鏈接談到PORT: http://lists.lazarus.freepascal.org/pipermail/lazarus/2009-August/044403.html

所以,我包括在我的下面這行代碼連接: dbConn.Par ams.Text:='port = 5430';

我不確定這是做這個連接字符串的最正確的方法,因爲我想連接字符串中可能還有其他參數也在使用,上面的方法可能會覆蓋這些參數。出於這個原因,我把這作爲第一行。

所以這種方法已經爲我工作。

還有另一種方法,我嘗試過,但它不適合我。這是使用追加方法(dbConn.Params.Append)

我還發現參數是區分大小寫的,我不得不寫'端口'('端口'不起作用)。

+0

您可以嘗試指定主機名部分中的端口,例如dbConn.HostName:='yourhost:5430';不知道這是否適用於postgresql驅動程序,但可以用於其他許多db驅動程序。 – reiniero

+0

+1'host = a user = x'因「不完整的啓動包」而失敗,'host = a port = 5432 user = x'工作 – Andomar