Postgresql串連介紹及串連常見問題解決辦法

來源:互聯網
上載者:User

一、正確的方式串連到了正確的資料庫
  如果想知道是否以正確的方式串連到了正確的資料庫,我們可以執行下面給出的命令加以驗證:
  SELECT inet_server_port(); 該命令顯示伺服器所偵聽的連接埠號碼。
  SELECT current_database(); 顯示當前的資料庫。
  SELECT current_user; 該命令顯示當前的userid。
  SELECT inet_server_addr(); 顯示接受已連線的服務器的IP地址。
  很明顯,使用者的口令是無法以普通SQL進行訪問的。
二、遠端存取資料庫
  為安全起見,PostgreSQL的許多版本 預設時禁用了其遠端存取功能。那麼,如何啟用該功能呢?
  為了啟用網路或者遠端存取功能,我們需要在postgresql.conf檔案中添加或者編輯下列內容:
  listen_addresses = '*'
  在pg_hba.conf的第一行添加如下內容,以便允許所有使用者通過加密口令來訪問所有資料庫:
  # TYPE DATABASE USER CIDR-ADDRESS METHOD
  host all all 0.0.0.0/0 md5
  下面我們對上面的內容做簡單說明。參數listen_addresses指定了要偵聽的IP地址。這樣的話,即使每個系統上有多個網卡也沒關係了。在大多數情況下,我們會接受所有網卡上的串連,所以可以使用“*”,它表示所有IP地址。
  pg_hba.conf中存放有一組基於主機的認證規則。每條規則會被逐條應用,直到找到一條符合的,就能通過認證;或者訪問被reject方法顯式拒絕。上面的樣本中給出的規則表示,所有遠端連線,無論使用者為誰,無論訪問那個資料庫,也無論來自哪個IP地址,都要求通過md5加密的口令進行認證。
  Type = host表示遠端連線。Database = all 表示所有資料庫。其他名字要求嚴格匹配,除非帶有首碼+,這個首碼表示組角色,而非某個使用者。我們還可以規定一個由逗號分隔的使用者表,或者使用@ symbol 來包含一個存放使用者表的檔案。我們還可以使用sameuser,這樣的話只有當使用者名稱和資料庫名稱一致時才匹配。
  User = all 表示所有使用者。其他名字要求嚴格匹配,除非帶有首碼+,這個首碼表示組角色,而非某個使用者。我們還可以規定一個由逗號分隔的使用者表,或者使用@ symbol來包含一個存放使用者表的檔案。
  CIDR-ADDRESS 由兩部分組成,即IP地址/子網路遮罩。子網路遮罩規定了IP地址中前面哪些位表示網路編號。這裡/0表示IP地址中沒有表示網路編號的位,這樣的話全部的IP地址都匹配,例如192.168.0.0/24表示匹配前24位,所以它匹配任何192.168.0.x形式的IP地址。我們還可以使用samenet或者samehost。
  這裡一定要注意,千萬不要使用password設定,這樣會允許明文形式的口令。
  Method = trust 實際上表示無需認證。其他的認證方法包括GSSAPI、SSPI、LDAP、RADIUS和PAM。此外,我們還可以使用SSL串連PostgreSQL,這時用用戶端的SSL認證進行認證


錯誤2:

psql: could not connect to server: Connection refused (0x0000274D/10061)
        Is the server running on host "???" and accepting
        TCP/IP connections on port 5432?
這個問題一般是以下原因造成的:   www.111cn.net
1.伺服器沒起來,ps -ef|grep postgres查看是否存在PG進程
2.監聽問題,cat postgresql.conf|grep listen 查看監聽地址是否正確
3.以上都沒問題,伺服器端能連進去,但用戶端不行,這時需要查看pg_hba.conf檔案
4.以上都沒問題,檢查伺服器端的iptables,開啟防火牆的訪問連接埠
 
錯誤3:

 是在群裡一個使用者貼的:
Fatal:connection limit exceeded for non-supersers
其實該問題和錯誤1是類似的,串連數接近資料庫設定的串連數.需要增大串連數 說明:
max_connections是資料庫允許的最大串連數,預設值100,
superuser_reserved_connections是預留給超級使用者的串連數,預設值3
修改這兩個參數都需要重啟DB;
與之相關聯的參數還有work_mem,串連數*work_mem可以得到DB的記憶體大小,這個調整視伺服器的記憶體大小


遠端連線PostgreSQL

 

A: 192.168.1.1 Windows Server 2003
B: 192.168.1.2 Windows XP pro


A機器安裝PostgreSQL,預設連接埠5432
想實現B機器通過遠端連線A機器的PostgreSQL服務。

如果A機器啟動Windows防火牆,則在“例外”中“添加連接埠”加上5432連接埠。

在postgresql.conf中的修改
listen_addresses = '*'
port = 5432

在pg_hba.conf中添加
host all all 192.168.1.2/32 trust

在B機器上用pgAdminIII試試串連A機器192.168.1.1

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.