Skip to content
 

Cài đặt PostgreSQL 9 trên CentOS

PostgreSQL

Bài viết này sẽ hướng dẫn các bạn cài đặt PostgreSQL 9.1 trên CentOS 6. Tuy nhiên cách cài đặt này cũng áp dụng được trên CentOS 5.

1. Cài đặt PostgreSQL Repository(repo):
– Tìm và tải các bản repo rpm mới nhất cho phiên bản RHEL/CentOS/Fedora mà bạn đang sử dụng [tại đây]
– Các repo rpm này có các phiên bản khác nhau dành cho 32 hoặc 64 bit. Bạn nên chọn phiên bản phù hợp. Ở đây mình chạy CentOS 6 (32bit) nên mình sẽ tải về gói này http://yum.pgrpms.org/9.1/redhat/rhel-6-i386/pgdg-centos91-9.1-4.noarch.rpm .
– Mình sử dụng wget để tải về:

wget http://yum.pgrpms.org/9.1/redhat/rhel-6-i386/pgdg-centos91-9.1-4.noarch.rpm

và kết quả như sau :

[root@db1 ~]# wget http://yum.pgrpms.org/9.1/redhat/rhel-6-i386/pgdg-centos91-9.1-4.noarch.rpm
–2012-03-30 19:20:35– http://yum.pgrpms.org/9.1/redhat/rhel-6-i386/pgdg-centos91-9.1-4.noarch.rpm
Resolving yum.pgrpms.org… 98.129.198.114
Connecting to yum.pgrpms.org|98.129.198.114|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 5164 (5.0K) [application/x-redhat-package-manager]
Saving to: “pgdg-centos91-9.1-4.noarch.rpm”

100%[=====================================================================>] 5,164 17.1K/s in 0.3s

2012-03-30 19:20:36 (17.1 KB/s) – “pgdg-centos91-9.1-4.noarch.rpm” saved [5164/5164]

– Tiếp theo, bạn cài đặt repo sử dụng lệnh “rpm”:

rpm -ivh pgdg-centos91-9.1-4.noarch.rpm

– Do mặc định CentOS 6 đã đính kèm PostgreSQL 8.4 trong repo chính thức, để tránh các “xung đột” về sau chúng ta sẽ loại trừ (exclude) gói PostgreSQL 8.4 này bằng cách thêm ‘exclude=postgresql*’ vào phần “[base]” và “updates” của tập tin /etc/yum.repos.d/CentOS-Base.repo tương tự như sau:

[base]
name=CentOS-$releasever – Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
exclude=postgresql*
#released updates
[updates]
name=CentOS-$releasever – Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
exclude=postgresql*

2. Sử dụng Yum để cài đặt PostgreSQL 9.1
– Bây giờ, bạn có thể sử dụng yum để cài đặt PostgreSQL 9.1 :

yum install postgresql91 postgresql91-devel postgresql91-server postgresql91-libs postgresql91-contrib


3. Khởi tạo và khởi chạy PostgreSQL:

– Khởi tạo PostgreSQL:

service postgresql-9.1 initdb

– Khởi chạy PostgreSQL:

service postgresql-9.1 start

– Cấu hình để PostgreSQL tự khởi chạy lúc hệ thống khởi động:

chkconfig postgresql-9.1 on

4. Đặt mật khẩu cho tài khoản postgres:
– Để đặt mật khẩu cho tài khoản quản trị “postgres” các bạn làm tương tự như sau (ở ví dụ này mình đặt mật khẩu là “changeme”):

[root@db1 ~]# su - postgres
-bash-4.1$ psql postgres postgres
psql (9.1.3)
Type "help" for help.

postgres=# alter user postgres with password 'changeme';
ALTER ROLE
postgres=#


5. Cấu hình để PostgreSQL xác thực bằng mật khẩu:

– Mặc định khi cài PostgreSQL kiểu xác thực sẽ là ident (xác thực qua ident server) cho các kết nối thông qua TCP/IP và xác thực kiểu “peer” cho các kết nối thông qua Unix socket.
– Để xác thực bằng mật khảu bảo mật, bạn phải chỉnh sửa tập tin /var/lib/pgsql/9.1/data/pg_hba.conf và thay đổi các METHOD thành “md5” tương tự như hình sau, có thể xem thêm cách cấu hình tập tin pg_hba.conf [tại đây]:
change auth method in postgresql
– Để các thay đổi có hiệu lực, bạn phải reload tập tin pg_hba.conf tương tự như sau :

[root@db1 ~]# su - postgres
-bash-4.1$ /usr/pgsql-9.1/bin/pg_ctl reload
server signaled
-bash-4.1$

– Thử kiểm tra lại xem có bị hỏi mật khẩu không ?

[root@db1 ~]# psql postgres postgres
Password for user postgres:
psql (9.1.3)
Type "help" for help.

postgres=#

6. Cấu hình PostgreSQL để có thể truy cập từ xa:
– Ví dụ: Bạn đang ở một server khác, muốn truy cập vào các database của PostgreSQL để khai thác các dữ liệu của bạn. Tuy nhiên mặc định PostgreSQL chỉ cho phép truy cập từ localhost ( từ chính máy chạy PostgreSQL). Vì thế để truy cập được PostgreSQL từ các server khác các bạn phải hiệu chỉnh tập tin postgresql.confpg_hba.conf ở thư mục /var/lib/pgsql/9.1/data/ . Trong ví dụ này mình sẽ cho phép truy cập vào PostgreSQL từ các client nằm trong đường mạng 192.168.255.0/24.
– Chỉnh sửa tập tin postgresql.conf, thay đổi “listen_address” tương tự hình sau :
Change postgresql listen address
– Chỉnh sửa tập tin pg_hba.conf và thay đổi tương tự như hình sau:
allow remote connections in postgresql
– Nếu bạn muốn cho phép truy cập từ bất cứ IP nào, thì chỉ chỉnh sửa “192.168.255.0/24” thành “0.0.0.0/0” như hình sau:
allow connect from any ipv4 in postgresql
– Sau đó bạn phải restart postgresql để các tùy chỉnh có hiệu lực:

service postgresql-9.1 restart

– Nếu server đang chạy PostgreSQL có firewall, bạn nhớ mở port 5432 cho PostgreSQL!
– Thử truy cập từ một máy khác xem thành công không ?
postgresql remote connection

Chúc bạn thành công!

This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Vietnam License.

8 Comments

  1. tran says:

    sao minh setup xong thi start service no bi failed

  2. tran says:

    Ban thong may minh chua cai unikey nen ko go dau dc nha.
    sau service postgresql-9.1 initdb
    start ok
    sau khi change config restart
    false
    hi;
    Minh chuyen xuong cai 8.4 dc roi ma bi loi ket noi ko biet ban biet cach khac phuc ko
    Sao minh dung php connect vao
    $dbconn = pg_connect(“host=localhost port=5432 dbname=qlbv user=admin password=123456”);
    No tra ra $dbconn =false ko ah

    • Hiên says:

      Xin chào bạn,
      Bạn connect vào db với “psql” bằng những thông tin đăng nhập đó thành công không ?

  3. tran says:

    minh them ham pg_last_error(); ko thay no tra ve gi ca
    Min xem trong page phpinfo(); thay pgsql da enable roi

    Minh co config the nay:
    # “local” is for Unix domain socket connections only
    local all all md5
    # IPv4 local connections:
    host all all 127.0.0.1/32 md5
    # IPv6 local connections:
    host all all ::1/128 md5
    # IPv4 internet connections:
    host all all 0.0.0.0/0 md5

    # – Connection Settings –
    listen_addresses=’*’
    #listen_addresses = ‘localhost’
    port = 5432

    va add them 2 dong trong iptables
    -A -INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEP
    -A -INPUT -m state –state NEW -m tcp -p tcp –dport 5432 -j ACCEP

  4. Learn4fun says:

    thanks you…
    Minh da truy cap duoc vao postgre thanh cong 🙂

  5. MinhLQ says:

    cảm ơn bạn, đúng cái mình đang cần