2015年9月16日 星期三

Mac安裝PostgreSQL與簡單教學

PostgreSQL和MySQL一樣都是一種SQL Server
以下有些教學是可以提供給會MySQL,也想使用PostgreSQL的使用者看看

第零步,安裝PostgreSQL

使用brew來安裝 (Linux的話就看是apt / yum 還是什麼的,以下以Mac為例)

brew install postgresql

成功的話,會看到最後有段訊息

To have launchd start postgresql at login:
  ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
Then to load postgresql now:
  launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Or, if you don't want/need launchctl, you can just run:
  postgres -D /usr/local/var/postgres


主要的重點是說,你想要一登入Mac的使用者,就自動啟動PostgreSQL的話,就在終端機輸入


ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents

要手動啟動 (第一次裝完最好也輸入一次)

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

如果想要停止的話輸入

postgres -D /usr/local/var/postgres




第一步,建立Database
createdb 是 postgresql 建立資料庫的指令

試看看建立資料庫,直接在Terminal中輸入 (此以 test_1 做為範例)
createdb test_1
註:由於postgresql設計的特性,一般來說執行postgresql ( postmaster )的user就會有直接連入資料庫的功能
所以不像MySQL,需要特別指定User
註2:postmaster為postgresql的資料庫服務




第二步,進入Database
如果成功,就可以開始進入剛剛建立的DB

psql test_1

如果沒有意外,可以看到終端機變成了
test_1=#
輸入\q就可以離開此模式 (此模式下按Ctrl + C是無效的)
輸入help可以看到一些簡單的說明

在PostgreSQL的終端(PSQL) 輸入 \du
可以看到現在的使用者,例如:

                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 seachaos  | Superuser, Create role, Create DB, Replication | {}
這裡現在列出的User Name (Role Name)應該和現在登入Mac的使用者名稱是一樣的

PSQL中輸入

SELECT version();

可以查看到現在的PostgreSQL版本資訊等等



第三步,操作Table (Create Table)
建立一個範例Table,可以在PSQL中輸入以下語法

CREATE TABLE mytable 
( id SERIAL NOT NULL ,
name varchar(255) NOT NULL ,
value text NOT NULL ,
time timestamp NOT NULL ,
PRIMARY KEY (id));
其中建立流水號的id語法,SERIAL相當於MySQL中的 AUTO_INCREMENT
(Mysql寫法為 id INT NOT NULL AUTO_INCREMENT , 在PostgreSQL為 id SERIAL NOT NULL )

如果要看現在PostgreSQL的Database中有那些Table,可以輸入 \dt 
(類似MySQL的 show tables )
應該可以看到類似以下的結果

test_1=# \dt
          List of relations
 Schema |  Name   | Type  |  Owner   
--------+---------+-------+----------
 public | mytable | table | seachaos
(1 row)



可以試看看插入(insert)一個資料到mytable中,語法如下:

insert into mytable (name,value,time)values(‘Good','this is value',now());

再來輸入Select語法,看剛才的insert是否成功:

select * from mytable

結果應該類似

test_1=# select * from mytable;
 id | name |     value     |            time            
----+------+---------------+----------------------------
  2 | Good | this is value | 2015-09-13 03:51:27.426327
(1 row)


再來其他的應該就和SQL一樣大同小異了