2007-08-23

Ubuntu 7.0+ 初學 PostgreSQL 者注意事項

更新:2007-11-02 (Update:01)
對映章節:

內容:
阿益最近在實體程課中將 Debian/UbuntuPostgreSQL
當成 LPIC 與 SCJP 班的正式必要教材...
Ubuntu 比 Debian 多了幾項使用者上安全性的控管機制
原設計是美意, 卻可能造成對初學 PostgreSQL 者上的不解...

這點讓阿益在經歷二梯次的 LPIC 教學後,
認為還是有必要寫篇給初學者參考,
必竟讓 PostgreSQL 親近於使用者是有必要的!

  1. 已由 APT 安裝後, 對於 PostgreSQL Server
    停用系統開機後即長駐, 改由手動載入者, 可到

    [系統] -> [系統管理] -> [服務]

    中取消選取 "PostgreSQL 資料庫伺服器".
    日後手動的啟停用經由終端機方式進行.

    $sudo /etc/init.d/postgresql-8.2 [start/stop/restart/...]


  2. 使用PostgreSQL Client 終端機命令: psql
    進行 PostgreSQL 終端機服務時, 出現類似以下情況之一:

    psql: 嚴重錯誤: Ident 驗證使用者"postgres" 失敗
    psql: 嚴重錯誤: 資料庫"up"不存在
    psql: 嚴重錯誤: role "up" does not exist

    主要原因為受到 PostgreSQL 中預設僅存在 postgres 用戶,
    受制於 pg_hba.conf 中對 Local 採用 Unix Sockets Ident
    驗正用戶身份(可自行調變驗正方式), 對於初學者最快上手的方式,
    為先轉為 postgres 用戶
    $sudo su postgres
    後,使用命令分別建立新使用者與新使用者同名的資料庫
    $createuser [您的用戶名]
    $createdb [您的用戶名]

    來創建您在 PostgreSQL 中的帳號,
    並自動易於使用同用戶名的預設資料庫.

  3. 使用 APT 安裝 PostgreSQL 後, 會自動幫您建構
    postgres 用戶與其專屬的 Home 目錄.
    切換成 postgres 用戶在 Ubuntu 必須擁有 sudo
    #sudo su postgres
    專屬的 Home 目錄與DB存放
    (限定專屬 postgres 700 rwx --- ---)
    /var/lib/postgresql/[version]/

  4. 預設安全性情況下, PostgreSQL 不接受遠端 TCP 連線
    (PostgreSQL 組態檔全集中在 /etc/postgresql/[version]/main/*)
    必須手動修改
    postgresql.conf (PostgreSQL系統組態文件)
    #listen_addresses='localhost' =>
    listen_addresses='*'
    *表示 All 後重啟 PostgreSQL Server.

    並配合適當修改
    pg_hba.conf (PostgreSQL 主機基礎的存取權限文件)
    中您需要的條件與來源 IP 來放寬安全性限制.
    格式:
    # TYPE DATABASE USER CIDR-ADDRESS METHOD
    host all all 0.0.0.0 0.0.0.0 md5
    #這行表示為接受以 host 型態來源IP為任意的連線
    到本地任一資料庫及任一使用者均可接受連線, 但認證方式採用 md5.

延伸閱讀(Link):

5 則留言:

Unknown 提到...

感謝 阿益兄:
留下此重要的程序.

然 ""為先轉為 postgres 用戶(#sudo su postgres)後,使用命令 ... ""
此段 方法與我有一些不同,在此提出以供網友參考

#sudo passwd postgres
(也許要,先輸入管理者 password)
(在輸入 postgres password,兩次)

#sudo su postgres
(輸入 postgres password)
#psql -d template1 (會進入)

Welcome to psql 8.2.3 the PostgreSQL interactive terminal.
....

template1=#create database db1; (所需的 database name)

template1=#\q (離開)
#

KuoChaoYi 提到...

很感謝您^.^

您提供的方法確實比我多考慮到一層安全性, 在預設的情況下我原本提供的方式只要擁有能進行 sudo 權的即可完全取得 PostgreSQL 的管理權, 這點您考慮的比阿益更多!!!
替 postgres 用戶再加上一道安全門, 這確實發生在 PostgreSQL 必須分離給非 sudo 原擁有人時, 多加了一道資料庫的安全鎖.

KuoChaoYi 提到...

再補充一點 #sudo passwd postgres 雖可以對 postgres 使用者給於密碼, 但一般情況下對擁有 sudo 權限者, 仍可直接變更為 postgres 哦

匿名 提到...

站長您好:
很冒昧的請教您有關 PostgresQL 相關問題,我先說明我的測試環境:
CPU AMD64 x 2 4000
RAM 8G
HD 轉速 7200
OS FreeBSD 7.0 amd64
PostgresQL 8.3
我建立了 3 個 Table A、B、C
Table A 有 a1、a2 欄位 a1 作 Index 共有 300 行資料。
Table B 有 b1、b2、b3 欄位 b1 作 Index,b3 與 a1 為外鍵關聯,共有 3 萬行資料。
Table C 有 c1、c2、c3 欄位 c1、c2 作 Index,c3 與 b1 為外鍵關聯,共有 300 萬行資料。
我建立一個 View D 以 A.a2 AS d1 , B.b2 AS d2 , C.c1 AS d3 , C.c2 AS d4 從 C left join B on c3 = b1 left join A on b3 = a1。
PostgresQL 預設為使用 Indexsearch 。
當我對 D 作查詢 Select d1,d2 From D Where d3 >= x AND d4 <= y(出現結果必為一行或為空)。
目前我的查詢速度為 0.6 秒多。
請問這樣環境下效能可以再增加嗎?
是否我該如何修改資料結構或是 PostgresQL .conf 的設定呢?

感謝您花費時間與我討論。

KuoChaoYi 提到...

PostgreSQL 伺服器效能調校精靈(工具)http://postgresql-chinese.blogspot.com/2008/09/postgresql.html
這篇文的工具會幫上你的忙, 雖然您用的是 Unix-like OS, 但異曲同工的去修改 postgresql.conf 是值得的, 如果預算夠, 當前的 SSD 做 RAID 效果很不錯哦, 前題只要你的DB不須儲放太多BYTEA.

PostgreSQL & Google-Analytics Running...

::Planet PostgreSQL::

PostgreSQL Information Page

PostgreSQL日記(日本 石井達夫先生Blog)

PostgreSQL News

黑喵的家 - 資料庫相關

Google 網上論壇
PostgreSQL 8 DBA 專業指南中文版
書籍內容討論與更多下載區(造訪此群組)
目錄下載: PostgreSQL_8 _DBA_Index_zh_TW.pdf (更新:2007-05-18)

全球訪客分佈圖(Google)

全球訪客分佈圖(Google)