Translations of this page?:

PostgreSQL

PostgreSQL เป็นฐานข้อมูลโอเพนซอร์สแบบ object-relational database system ที่มาพร้อมความสามารถมากมายที่สั่งสมมาตลอด 15 ปีของการพัฒนา และยังมีสถาปัตยกรรมที่ขึ้นชื่อเรื่องความน่าเชื่อถือ สมรรถนะ และการทำงานอย่างถูกต้องอีกด้วย 1)

ไลบรารี่และอแดปเตอร์สำหรับ ActiveRecord

ในปัจจุบัน Rails สนับสนุนอแดปเตอร์สำหรับทำงานกับ ActiveRecord เพียงแค่ตัวเดียว ซึ่งในไฟล์ database.yml จะใช้ชื่อว่า “ postgresql” และสามารถทำงานร่วมกันได้กับ postgres และ postgres-pr gems

ตอนนี้มีไลบรารี่สำหรับ PostgreSQL-Client ที่มาในรูปแบบ gem อยู่ 4 ไลบรารี่ นั่นก็คือ:

  1. postgres gem ซึ่งถูกเขียนด้วยภาษา C และใช้ร่วมกันกับ ActiveRecord ได้ release ล่าสุดคือเวอร์ชั่น 0.7.9 (2008-01-24) แต่ว่าปัจจุบันไลบรารี่นี้หยุดการพัฒนาแล้วเพื่อไปทุ่มเวลาให้กับ pg gem แทน
  2. pg gem คือผู้สืบทอดของ postgres gem ซึ่งก็ถูกเขียนด้วยภาษา C เช่นกัน gem นี้เป็น gem หลักที่ ActiveRecord ใช้ แต่ว่าถ้าหาไม่เจอ ActiveRecord จะพยายามโหลด postgres gem ขึ้นมาและ patch มันเพื่อให้ใช้งานใน Rails ได้ เวอร์ชั่นล่าสุดของไลบรารี่นี้คือ 0.8 (2009-03-29) ทั้ง postgres และ pg ถูกโฮสต์ที่นี่: https://rubyforge.org/projects/ruby-pg/
  3. postgres-pr gem ถูกเขียนด้วยภาษา Ruby ล้วนๆ และทำงานกับ ActiveRecord ได้เนื่องจากว่ามี compatibility layer ซึ่งทำตัวเหมือน “ postgres” gem เวอร์ชั่นล่าสุดคือ 0.6.1 (2009-03-02) คุณสามารถไปดูหน้าโฮมเพจของไลบรารี่นี้ได้ที่: https://rubyforge.org/projects/postgres-pr/
  4. สำหรับไลบรารี่สุดท้ายคือ ruby-postgres gem เราไม่มีข้อมูลมากนัก แต่ที่แน่นอนก็คือไลบรารี่นี้ไม่สามารถทำงานกับ ActiveRecord ได้ เวอร์ชั่นล่าสุดคือ 0.7.1 (2006-04-06) คุณสามารถดูข้อมูลของไลบรารี่นี้ได้ที่นี่: https://rubyforge.org/projects/ruby-postgres/

การใช้ PostgreSQL กับ Rails

การสร้างแอพพลิเคฃั่นใหม่

สำหรับการสร้างแอพพลิเคชั่น Rails ใหม่ที่ใช้ฐานข้อมูล PostegreSQL ให้พิมพ์คำสั่ง:

$ rails -d postgresql my_rails_app

จากนั้นให้แก้ไขไฟล์ database.yml ให้ชี้ไปที่ฐานข้อมูลของคุณ

ตัวอย่างไฟล์ database.yml

  development:
    adapter: postgresql
    host: localhost
    port: 5432
    username: your_db_username
    password: your_db_password
    database: your_rails_project_development
    schema_search_path: public
    encoding: utf8
    template: template0

คุณไม่จำเป็นต้องระบุ port ถ้าจะใช้ port 5432 อยู่แล้ว นอกจากนั้น encoding กับ schema_search_path ก็ไม่จำเป็นนอกจากว่าคุณไม่อยากจะใช้ค่า default ที่มากับ PostgreSQL กรณีที่คุณต้องการใช้ UTF8 ให้ระบุค่า “ template0” สำหรับ template เพราะว่า PostgreSQL 8.3 ใช้ encoding แบบ SQL_ASCII เป็นค่าเริ่มต้น

ถ้าคุณไม่ระบุค่า host และ port ในระบบปฏิบัติการลีนุกซ์หรือยูนิกซ์ ระบบจะใช้ domain socket แทน TCP session แต่ถ้าคุณระบุค่าสำหรับ host คุณสามารถระบุ path สำหรับ domain socket ที่คุณต้องการได้ด้วย (ค่า default ดูเหมือนจะเป็น /var/run/postgresql)

ถ้าคุณใช้การตรวจสอบชื่อผู้ใช้แบบ ident auth สำหรับ PostgreSQL คุณไม่จำเป็นต้องระบุ password ก็ได้ เพราะว่าปกติแล้ว ident auth จะอนุญาตให้ผู้ใช้เข้าใช้ได้ทันทีถ้าชื่อตรงกับชื่อของผู้ใช้ในฐานข้อมูล ซึ่งหมายความว่าชื่อผู้ใช้ที่ระบุในแอพพลิเคชั่น Rails จะต้องตรงกับชื่อผู้ใช้ฐานข้อมูลเพื่อที่ ident auth จะทำงานได้อย่างถูกต้อง

หมายเหตุ: คุณสามารถใช้ unicode แทน utf8 สำหรับระบุ encoding ได้

การติดตั้ง

Debian Lenny

  aptitude install ruby-full build-essential postgresql-server-dev-8.3
  gem install postgres

ติดตั้งจากซอร์สโค้ดในแมค OS X Leopard

  • ดาวน์โหลดซอร์สโค้ด

จาก http://www.postgresql.org/ftp/source/

  • แตกไฟล์และคอมไพล์
# เปลี่ยนตัวเลขให้เป็นเลขเวอร์ชั่นที่คุณดาวน์โหลดมา
$ tar zxvf postgresql-8.3.6.tar.gz
$ cd postgresql-8.3.6
$ ./configure
$ make
$ sudo make install
  • สร้างผู้ใช้และกลุ่มผู้ใช้สำหรับ Postgres

$ sudo dscl . create /Users/_pgsql

 $ sudo dscl . create /Users/_pgsql UserShell /bin/tcsh
 $ sudo dscl . create /Users/_pgsql UniqueID 101
 $ sudo dscl . create /Users/_pgsql PrimaryGroupID 101
 $ sudo dscl . create /Users/_pgsql NFSHomeDirectory /usr/local/pgsql/
 $ sudo dscl . create /Users/_pgsql RealName "PostgreSQL Server"
 $ sudo dscl . append /Users/_pgsql RecordName pgsql
 $ sudo dscl . create /Groups/_pgsql
 $ sudo dscl . create /Groups/_pgsql PrimaryGroupID 101
 $ sudo dscl . append /Groups/_pgsql RecordName pgsql
 $ sudo dscl . create /Groups/_pgsql RealName "PostgreSQL Users"
  • เปลี่ยนเจ้าของไดเร็คทอรี่ pgsql ให้เป็นผู้ใช้และกลุ่มผู้ใช้ Postgres
 $ sudo chown -R _pgsql:_pgsql /usr/local/pgsql
  • สร้างคลัสเตอร์ใหม่
 $ sudo su - _pgsql
 $ /usr/local/pgsql/bin/initdb -E utf8 --locale=en_US.UTF-8 -D /usr/local/pgsql/data
 $ exit

ติดตั้งจาก MacPorts ใน Mac OS X Leopard

  • ติดตั้ง port
$ sudo port install postgresql83-server
  • เริ่มใช้งาน postgresql ทันทีและทุกๆครั้งที่บู๊ทเครื่องโดยใช้ LaunchDaemons
$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.postgresql83-server.plist
  • ตั้งค่าฐานข้อมูล
$ sudo mkdir -p /opt/local/var/db/postgresql83/defaultdb
$ sudo chown postgres:postgres /opt/local/var/db/postgresql83/defaultdb
$ sudo su postgres -c '/opt/local/lib/postgresql83/bin/initdb -D /opt/local/var/db/postgresql83/defaultdb'

ติดตั้ง pg gem

  • ดาวน์โหลดและบิลด์ pg gem (ใน Intel Mac OS X 10.5, ถ้าติดตั้ง postgresql จากซอร์สโค้ด)
 $ sudo su -
 # setenv ARCHFLAGS '-arch i386'
 # gem install pg -- --with-pgsql-include=/usr/local/pgsql/include --with-pgsql-lib=/usr/local/pgsql/lib
 # exit
 หมายเหตุ: สำหรับ Snow Leopard 64-bit ต้องใช้: setenv ARCHFLAGS '-arch x86_64'
 นอกจากนั้น pg 0.9.0+ ยังต้องใช้ --with-pg-include, --with-pg-lib ด้วย
  • บิลด์ pg gem (ใน Intel Mac OS X 10.5, ถ้าติดตั้ง postgresql ผ่าน macports)
 $ sudo gem install pg

หมายเหตุ: ถ้าคุณดูที่ http://rubyforge.org/projects/ruby-pg/ คุณจะเห็นว่า gem เวอร์ชั่นใหม่ที่สุดคือ 'pg' ไม่ใช่ 'postgres'

 
th/database-support/postgres.txt · แก้ไขครั้งล่าสุด: 2010/03/01 15:49 โดย sukit
 
Recent changes RSS feed Creative Commons License