PostgreSQL 與 epgsql

我在規劃一個社群平台,架構就是當前綜合了網站與手機應用程式的東西,於是需要一個有規模的後端。而對於後端,最主要的工作是挑選資料庫。

想了好幾天,覺得 PostgreSQL 容易配置並容易擴充。並且由於網站打算使用 Erlang 的 nitrogen ,所以挑了 Will 版本的 epgsql ,即 https://github.com/wg/epgsql

我目前剛開始了解 PostgreSQL ,具體來說,只有花一天讀過最新版的文件而已。我還不知道啟動 pgsql 的指令參數配置,於是只好先在 OS X 使用「可怕的藍色大象客戶端」 PostgreSQL.app 來代管系統。

首先,要把 pgsql server 跑起來,接下來的動作才可以運作。

先創造新的資料庫,方法為:(令 hellodb 為資料庫名稱)( pgsql 的路徑,請自己搞定)

$ createdb hellodb
$ psql hellodb
(接著便開啟 pgsql 的命令環境)

然後,編譯好 epgsql 並且執行,整體指令如下:(同樣, Erlang 或 kerl 安裝部署,請自己搞定)

$ git clone http://github.com/wg/epgsql
$ cd epgsql
$ make app
$ cd ebin
$ erl
(接著便進入 Erlang 的命令環境)

接著,從 erl 環境來試一下 epgsql :(令 OS X 帳號名為 user1 而密碼是 password1 )

> {ok, C} = pgsql:connect("localhost", "user1", "password1", [{database, "hellodb"}]).
> {ok, <0.34.0>}
> pgsql:squery(C, "create table test (test int);").
> {ok, [], []}
> pgsql:close(C).
> ok
> f(C).
> ok

然後可以切換去 pgsql 的命令環境,看看新出現什麼表格:

hellodb=# \d
(接著便列出 hellodb 裡的表格,包含名為 test 的表格)

然後,再看看 epgsql 較後面的函數,有一個叫做 parse/2 或 parse/4 的,有點特別。 parse/(2 | 4) 是指去 parse pgsql 的表格。(而不是如我最初亂猜的, parse 一則 SQL 。)換句話說,就是得知表格綱要。

操作方式:(照舊,令已經取得連線 C )

> {ok, Statement} = pgsql:parse(C, "select * from test where test = $1;").
{ok, {statement, "hello,world", [ ... ], [int]}}

[…] 是一堆 column ,[int] 是指查詢參數的資料型別。

> pgsql:bind(C, Statement, [12]).
ok
> {ok, Rows} = pgsql:execute(C, Statement).
{ok, [{...}]}

pgsql:bind/3 把參數代入 Statement ,然後可以 pgsql:execute/2 執行。執行之後,獲得的列數 Rows 是每一列以 tuple 表達。

廣告

About 黃耀賢 (Yau-Hsien Huang)

熱愛 Erlang ,並且有相關工作經驗。喜歡程式語言。喜歡邏輯。目前用 Python 工作。
本篇發表於 Uncategorized。將永久鏈結加入書籤。