Debian Linux 架設 PostgreSQL + PhpPgAdmin

紀錄在 Debian Linux 上安裝 PostgreSQL 和 phppgadmin 的設定和過程~ 🙂

安裝 postgresql 

  • apt-get install postgresql # 照理說這樣子 Postgre SQL 就已經裝好了.

測試看看 PosrgreSQL 基本操作:

  1. sudo -u postgres psql template1 # 要用 postgres 的身份執行才可以
  2. template1=# create user PG_USER with password 'PASSWORD' createdb createuser; # 建立新帳號/密碼
  3. template1=# alter user postgres with password 'PASSWORD'; # 修改postgres的密碼
  4. template1=# \q # 離開
  5. PS: 於此處下的指令, 都會存在 /var/lib/postgresql/.psql_history 這個檔案裡.

再來來架設 phppgadmin:

  1. 安裝 phppgadmin
  2. apt-get install phppgadmin libapache2-mod-php5 
  3. 將 /phppgadmin 指到 phppgadmin 預設安裝路徑(/usr/share/phppgadmin), 採用 package 寫好的 conf 檔
  4. ln -s /etc/phppgadmin/apache.conf /etc/apache2/sites-enabled/001-phppgadmin
  5. 修改權限設定, 預設只讓本機自己存取, 改成都先不限.
  6. vim /etc/phppgadmin/apache.conf
  7. 將下述

    allow from 127.0.0.0/255.0.0.0
    # allow from all

  8. 改成

    #allow from 127.0.0.0/255.0.0.0
    allow from all

  9. /etc/init.d/apache2 reload
  10. 這樣子就完工囉!!

phppgadmin 預設是不讓 postgres 登入, 所以最好要先 create 一個 user 再登入使用.

  1. 如果想要讓 postgres 登入, 一定要先修改 postgres 的密碼(postgres 的密碼不能為空)
  2. vim /etc/phppgadmin/config.inc.php
  3. 修改 $conf['extra_login_security'] = true;
  4. 變成 $conf['extra_login_security'] = false;
  5. 這樣子就可以用 postgres 登入.

 預設 PostgreSQL data 儲存路徑: /var/lib/postgresql/8.2/main, 修改成自定的路徑:

  1. mkdir -p /var/postgresql/data
  2. chown -R postgres:postgres /var/postgresql/
  3. sudo su - postgres # 轉換成 postgres 的身份
  4. vim ~/.bashrc # 設定環境參數, 將下述寫入 .bashrc 檔最下面即可
  5. export POSTGRE_HOME=/usr/lib/postgresql/8.2
  6. export PGLIB=$POSTGRE_HOME/lib
  7. export PGDATA=/var/postgresql/data
  8. export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
  9. export PATH=$PATH:$POSTGRE_HOME/bin
  10. source ~/.bashrc
  11. initdb --pgdata=/var/postgresql/data
  12. 啟動 DB:(下述二者挑其一即可)
  13. pg_ctl -D /var/postgresql/data -l logfile start
  14. postgres -D /var/postgresql/data

參考:


關於 Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
本篇發表於 My_Note-Unix。將永久鏈結加入書籤。

Debian Linux 架設 PostgreSQL + PhpPgAdmin 有 31 則回應

  1. 葉子 說道:

    如果在安裝完postgresql-8.1
    他正在啟動的時候出現下列訊息
    * Restarting PostgreSQL 8.1 database server * The PostgreSQL server failed to start. Please check the log output:
    2007-07-30 11:37:41 CST LOG: 無法載入根憑證檔"root.crt":No SSL error reported
    2007-07-30 11:37:41 CST 詳細:Will not verify client certificates.
    2007-07-30 11:37:41 CST LOG: could not translate host name "localhost", service "5432" to address: Name or service not known
    2007-07-30 11:37:41 CST WARNING: 無法為"localhost"建立接受連線的socket
    2007-07-30 11:37:41 CST 嚴重錯誤: could not create any TCP/IP sockets
    [fail]
    他的意思好像是root的憑證有問題,但是我不知道為什麼會這樣,但是我用另外一台安裝似乎沒有這樣的問題耶。
    2台系統都是
    Ubuntu Server 7.04
    Apache2
    Mysql
    php5

  2. Tsung 說道:

    我猜您另一台是設到 ssl 了, 但是我是沒試過, 我做的話應該會從 postgresql.conf 去查查看有哪邊不同吧.
    您可以參考下面兩篇看看:
    http://www.postgresql.org/docs/8.2/static/ssl-tcp.html
    http://www.postgresql.org/docs/8.2/interactive/libpq-ssl.html

  3. 葉子 說道:

    感謝>"

  4. Tsung 說道:

    哈~ 🙂
    能解決問題就是好解法, 沒什麼特別對錯的 😛

  5. KitshiNg 說道:

    你好..
    我完全跟著 Tsung's Blog 的教學做了一次,
    然後開了 http://localhost/phppgadmin/
    但 登入的時候
    登入是不是 這個呢 ?
    Username: PG_USER
    Password: PASSWORD
    因為我怎樣登入也是 Login failed[/code]

  6. Tsung 說道:

    厄, 我上面全部大寫的東西, 事實上是當變數, 應該說可以換成自己想取的名字. XD
    您或許可以試試 pg_user 小寫的 login 看看.
    不然就是先看第 10 步驟下面的, 試試用 postgres 登入看看.
    再進去看 pg_user 的這個帳號有沒有被開啟了~ 試試看吧 🙂

  7. KitshiNg 說道:

    其實我不明白,下面你意思是甚麼 ?
    『將 /phppgadmin 指到 phppgadmin 預設安裝路徑(/usr/share/phppgadmin), 採用 package 寫好的 conf 檔』
    /phppgadmin ??? (我太新了,請詳細一點@@")

  8. KitshiNg 說道:

    我每一次 restart service 時都有一句 command not found ,
    但結果又說是 postmaster successfully started
    為甚麼呢 ? ( 我雖然是跟著你的教學去做,但我安裝的是 postgreSQL 7.4
    postgres@debianserver:~$ pg_ctl -D /var/postgresql/data/ restart
    pg_ctl: could not find /var/postgresql/data//postmaster.pid
    Is postmaster running?
    starting postmaster anyway
    cat: /var/postgresql/data//postmaster.opts: ���������������������������
    /usr/lib/postgresql/7.4/bin/pg_ctl: line 359: : command not found
    postmaster successfully started

  9. KitshiNg 說道:

    已經跟著上面修改了
    vim /etc/phppgadmin/config.inc.php
    然後...
    debianserver:~# sudo -u postgres psql template1
    Welcome to psql 7.4.17, the PostgreSQL interactive terminal.
    Type: \copyright for distribution terms
    \h for help with SQL commands
    \? for help on internal slash commands
    \g or terminate with semicolon to execute query
    \q to quit
    template1=# alter user postgres with password '123456';
    ALTER USER
    template1=# \q
    debianserver:~# source /etc/postgresql
    在phppgadmin 登入時 ===> Login failed

  10. Tsung 說道:

    嗯嗯, 不好意思, 是我寫不好.. Orz..
    『將 /phppgadmin 指到 phppgadmin 預設安裝路徑(/usr/share/phppgadmin), 採用 package 寫好的 conf 檔』 => 這意思是指第 4 點的 "ln -s ..." 做的事情是這句話.
    然後你要不要安裝看看 8.0, 因為我記得 7.4 有些小問題要改(我忘記之前有改什麼了).
    你的看起來是找另找不到 pg_ctl, 然後啟動好像根本沒有起來.(因為啟動完應該會有 pid, 但是你的 pid file 是找不到的.)

  11. Tsung 說道:

    改完密碼後, 試著下面二選一, 重新啟動 postgresql DB 看看.(路徑寫你 DB 存的路徑)
    # pg_ctl -D /var/postgresql/data -l logfile start
    # postgres -D /var/postgresql/data

  12. KitshiNg 說道:

    好吧~
    我現在 apt-get remove postgresql
    然後 apt-get install postgresql-8.1
    我再做回以上的步驟看看有沒有問題吧...Thanks
    p.s. 我忘了說我是用 Debian 4.0 的

  13. Tsung 說道:

    嗯~ 我想應該 Debian 4.0 這些都沒有關係的.
    (但是 PostgreSQL 7.4 是有點關係, 因為 7.4 的 deb package 好像包的不太好, 有不少地方要改就是了 :()

  14. KitshiNg 說道:

    下面還是用 Postgresql 7.4 的
    postgres@debianserver:~$ pg_ctl -D /var/postgresql/data/ -l logfile1 start
    postmaster successfully started
    postgres@debianserver:~$ postgres -D /var/postgresql/data/
    FATAL: database "postgres" does not exist
    postgres@debianserver:~$ vim logfile1
    下面是 logfile 內容
    FATAL: lock file "/var/run/postgresql/.s.PGSQL.5432.lock" already exists
    HINT: Is another postmaster (PID 2092) using socket file "/var/run/postgresql/.s.PGSQL.5432"?
    總是問題多多 >.

  15. Tsung 說道:

    Sorry 應該要 sudo 或 sudo -u postgres 再執行命令... Orz...

  16. KitshiNg 說道:

    我再 apt-get install postgresql-8.1
    重新所有程序
    成功用自己建立的 pg_user 登入了 🙂
    但我打 pg_ctl -D /var/postgresql/data -l logfile start
    再查看 vim logfile
    看見
    LOG:
    ������bind
    IPv4
    sockett��������������������
    ������Is
    another postmaster already running on port 5432? If
    not, wait a few seconds and retry.
    WARNING:
    ���������"localhost""�������・���������socket
    �������:
    could not create any TCP/IP sockets
    為什麼比 7.4 的 logfile 還要多問號 呢 ?
    而且大概出了甚麼問題?
    - -- - -- - - - - - - - - - - - - - - - - - - - --
    『Sorry 應該要 sudo 或 sudo -u postgres 再執行命令... Orz...』
    Kitshing: 只是我太新,一定概念也沒有,不知道要用 sudo ^^"
    - - - - - -- -- - - - - --- - - - - - - - - - - - - - -- -

  17. Tsung 說道:

    因為上面寫 "already running", 我猜應該是這個原因吧~
    您可以試試看先停掉再開, 應該就不會有那麼多 error 了, 恭喜您成功囉 😀

  18. KitshiNg 說道:

    另外,請問為什麼這個 logfile error 有這麼多問號呢 ?
    如何可以令出的 error 變會文字 ?
    ====
    停了再重新啓動也是有 error
    但用 restart 就沒問題了
    真的十分謝謝 🙂
    ( 我被這個 7.4 玩了一個星期了 -_-" )

  19. Tsung 說道:

    我猜那些是中文字, 或許設定 postgres 的 .bashrc, LANG=en 看看.
    停了再重新啟動也有此問題, 應該是沒停乾淨, 你試試停了後, 再 netstat -tln | grep 5432 或 lsof -Pni |grep ":5432" 看看.
    等到都沒有秀出值後再啟動.
    因為錯誤訊息寫說還有東西在跑:
    another postmaster already running on port 5432? If
    not, wait a few seconds and retry
    辛苦了, 我記得之前搞 7.4 發現問題還不少. Orz..

  20. KitshiNg 說道:

    postgres@debianserver:~$ netstat -tln | grep 5432
    tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
    postgres@debianserver:~$ pg_ctl -D /var/postgresql/data/ -l logfile stop
    pg_ctl���PID���"/var/postgresql/data/postmaster.pid"���������
    postmaster���������������������
    postgres@debianserver:~$ pg_ctl -D /var/postgresql/data/ -l logfile start
    postmaster������������
    postgres@debianserver:~$ pg_ctl -D /var/postgresql/data/ -l logfile stop
    pg_ctl���PID���"/var/postgresql/data/postmaster.pid"���������
    postmaster���������������������
    postgres@debianserver:~$ netstat -tln | grep 5432
    tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
    postgres@debianserver:~$
    用到了,停不了..@_@

  21. Tsung 說道:

    厄... 從另一個觀點看, 這也是好事嘛~ DB 本來就不該停掉的... XDDDDDD
    這... 就先這樣子吧. XDDD
    我手邊現在也沒有 postgresql 的機器可以測~ 反正能跑最重要 😛

  22. KitshiNg 說道:

    今天我想寫一個 php page 是把 .csv import
    寫入 Postgresql 8.1.9 ( on Debian 4.0) ( 用的是 Apache2 PHP 5 )

    在 windows 寫好了 php page 後,放去 Apache 執行
    開了 Firefox on windows,匯入一個 .csv

    這個.csv 是包含 英文,中文,數字
    例: kitshing,香港,24680

    但看看 PostgreSQL 的時候,中文亂了
    試過用建立 EUC_TW, UTF8 的 database 都不行,
    會不會是我的 php 寫錯了呢 ?

    //----- PHP Code 的寫入 Database 部份 -------------------------
    @ $db = pg_connect("host=localhost port=5432 dbname=testdb user=pg_admin password=123456") or
    die("Could not connect to database.");
    pg_client_encoding($db);
    //insert into table "index",get data with array data[] from CSV file
    $sql = "insert into index values ('".$data[0]."','".$data[1]."','".$data[2]."')";
    $result = pg_query($db, $sql);

    //------------------------------------------------

  23. Tsung 說道:

    pg_client_encoding($db);

  24. KitshiNg 說道:

    http://hk.php.net/manual/hk/function.pg-client-encoding.php
    望真一點...好像解釋是只回饋出一個 Client 用的 encoding, 用錯了=.=..Sorry
    但我想問問,是否用 array 儲存中文會發生問題的呢
    我用 fgetcsv() 拿 csv 的資料出來時,出來的 array 甚麼都沒找到
    但我用 fgets() 拿 csv 的資料出來時,出來的中文字是沒問題的
    但如果再放把這些出來沒問題的中文字,分段放進去 array 中,
    最後再將這個 array output 出來,但又是沒有東西在裡面。
    (因為我需要把一些 csv 檔,用 php 把它全部寫入到 PostgreSQL 中 ,途中需要做一些加減的計算才寫到 postgreSQL )
    發生甚麼是呢 ?
    (( 請原諒我的打擾 ))

  25. Tsung 說道:

    所以你主要是要處理 csv 檔, 並不需要 PostgreSQL 吧?
    處理 csv 檔, 我沒用過 fgetcsv 耶, 我都是 fgets, 再用 split 去切.
    php array 存 array 是不會有問題的, 我想是不是你寫法上有問題呢?
    還是你要把程式放在某個地方, 讓我看一下? 或寄給我看看?

  26. KitshiNg 說道:

    我是用 fgets ,再用 strtok 去切開的
    對。主要只是要處理 csv 檔, 然後要儲存到 PostgreSQL 裡。
    好吧,我隔幾日把這個檔案寄給你吧。
    ( 因為這個檔案遺留了別處 :p )

  27. Tsung 說道:

    我猜 csv 檔應該是 big5, 你有沒有先轉成 UTF-8 再存進 PostgreSQL 呢?

  28. Kitshing 說道:

    我記憶中...
    我建立了 utf8 的 PostgreSQL database 後
    用 phppgadmin 進入,編輯一個記錄,把記錄改成中文字體。
    儲存後,發現亂碼了
    但用 EUC_TW 的 database 就沒有亂碼了。
    但無論是哪個,我用 csv 檔存進去都是亂碼
    * 如何把 csv 轉成 utf-8 再存進去呢..@@?
    * 遲幾天寄個處理 csv 的檔給你看看有沒有問題 🙂

  29. Tsung 說道:

    mb_convert_encoding($var, 'UTF-8', 'cp950');
    用這個就可以了 🙂

  30. 果冻 說道:

    hi,dear:
    為什麼我的postgresql.conf沒有tcpip.socket選項?
    無法開啟tcpip訪問?

  31. Tsung 說道:

    我有寫到這個嗎? @.@a..
    通常如果沒有選項, 那自己加進去應該還是可以動的, 試試看?

發表迴響