資料庫相關

在 Ubuntu 上的 PostgreSQL 預設存取認證方式

在 FreeBSD 和 CentOS 上,第一次著手使用 PostgreSQL 非常容易,因為 root 的密碼你會知道,所以只需要以下列這兩個指令,就可以不用知道安裝程式到底替你的 pgsql 或者 postgres 指定了什麼複雜的密碼,你都可以切成 PostgreSQL 的系統帳號,來執行該有的管理命令:

 

$ su

 

# su - pgsql (這是在 FreeBSD ,或者)

 

# su - postgres (這是在 CentOS 上)

 

在 FreeBSD 上第一步更輕鬆,因為 FreeBSD 上的 PostgreSQL

Npgsql

如果你常常在微軟的世界裏寫程式,你一定知道什麼是 .Net Data Provider,它就是 .NET 資料庫程式設計用的資料庫驅動程式,而 PostgreSQL 專屬的官方 .Net Data Provider 就是 Npgsql。Npgsql 目前是 PostgreSQL 的應用程式界面中,維護的速度前三名的;另兩個是 ODBC driver 和 JDBC driver。半個月前 Npgsql 釋出 2.0.7 版。這只是 2.0 版的第七個安全性更新。已經釋出一年的 2.0.x 版,實作了給 .Net 2.0 和 3.5 甚至 3.5sp1 的 .Net Data Provider 絕大部份的功能。也就是說,如果你是在用微軟的 Visual Studio 2008 寫程式,不管你是用 C#、VB 還是 C++,就是用這個 Data Provider 就對了,就算你用的是不用錢的 Visual Studio Express 也能。

實作建立新的 Tablespace

上個星期發表的 PostgreSQL 的 Tablespace 只有文字說明。事實上,我曾想用圖來解說 Oracle 的 tablespace 的架構,順便也畫一張 PostgreSQL 的架構圖,但是人懶沒畫Tongue out;不是啦,其實是我不太會用繪圖軟體,等我有空再慢慢把圖補起來。但是,如果實作一下在 PostgreSQL 建立一個新的 tablespace,然後 demo 一下是做得到的。

PostgreSQL 的 Tablespace

這一篇文章原本是三個月前就開始寫,原先預定是剛好九月底時出刊,但是在發展的過程,突然覺得似乎應該先介紹一下 PostgreSQL 如何來放置、維護資料,再來聊聊 Tablespace 可能比較適當,接著生了一場重病再加上發神經買了一台新電腦,所以就放到現在才發表。

PostgreSQL 在進入 8.0 版時,整套系統的架構大變,新增了不少功能和架構, Tablespace 就是其中一項。當我第一次在 pgAdmin III 上看到 Tablespace 這個字眼出現時,我是非常興奮的,因為要在較大型的資料庫中,才會有這種概念。尤其是之前有 Oracle 的實作經驗,所以看到熟悉的字眼出現時,備感親切,而內心對它充滿期待。但是在進一步深入研究後,就有如被潑了一桶冷水一樣,PostgreSQL 的 Tablespace 和 Oracle 的 Tablespace 功能上差距還不小,實作上更是不一樣。

首先來說明一下,什麼是 Tablespace?Tablespace 一般都翻譯成表格空間。而表格空間,按照手冊上的定義,是整個系統的資料主體。

PostgreSQL 如何組織資料

原本上個月,打算寫另一篇文章,但是寫到一半,臨時改變計劃,決定先把這篇文章推出來。

在教授 PostgreSQL 時,我發覺,要讓稍微有點基礎的其它資料庫使用者,最容易上手 PostgreSQL 的方法,就是從說明 PostgreSQL 如何在檔案系統中放置你的資料著手。PostgreSQL 存放資料的邏輯相當簡單,所以進階使用者在了解這個邏輯後,很容易就能了解如何備份、擴充功能等等進階功能,不像 Oracle 等商用資料庫,把資料包在一層厚厚的黑盒子裏,不讓你接觸和了解它的行為;但是很不幸的,它也相當程度的依賴檔案系統。這會出現什麼問題呢?等我介紹完 tablespace 後,我想不用我多做解釋你也自然立刻能夠了解。

在開始介紹前,我要介紹一個環境變數。這個環境變數是 $PGDATA,將來我會找個時間把 PostgreSQL 會用到的環境變數做個整理,再另外發表一篇文章來介紹。垷在先稍微介紹一下 $PGDATA

PostgreSQL JDBC 客戶端以 SSL 傳輸資料,以 NetBeans 為例

上次 利用 SSL 讓 PostgreSQL 有一個安全的網路傳輸 談到如何在 PostgreSQL 伺服器端上設定,讓資料通訊能夠以 SSL 加密所要傳送的資料。那篇文章的最後,我留了一個伏筆,不在該篇討論客戶端的連接。那是因為依客戶端的特質的不同,SSL 加密連接的設定方式也就不同,如果要在當時就討論,那麼那篇文章就太過冗長了。PostgreSQL 的客戶端的連接方式很多,如果你用的語言是 C,那麼你可以直接用 libpg 這類的 API 直接連接;用 Java 的,當然得透 JDBC driver (除非你太閒,想證明自己的實力,用 JNI 來寫);如果你用 MS Access,那麼就要用 ODBC 來連接;如果你要用 Visual BASIC.NET、C# 則用 .NET provider......。換句話說,客戶端不同時,SSL 的設定方式就不同。

利用 SSL 讓 PostgreSQL 有一個安全的網路傳輸

如果你的資料庫應用,全都只能讓伺服器本機上的應用程式連線使用,那麼就太過暴殄天物了。RDBMS 原本就是設計來讓多人同時使用的,我們評比一個資料庫系統的良莠,有一個評定的標準就是同時連線的數目,看看這套資料庫管理系統,同時可以服務多少使用者。所以從網路上連上資料庫就變成相當稀鬆平常的應用。但是,一旦資料在網路上傳遞,就有資料外洩的考量。如果你存放的資料不怕被外人窺視也就算了,但是這是不可能的事,一般公司存放在資料庫中的資料,絕對都是機密性高的資料,所以當你的應用程式和資料庫間,一旦有人得以偷窺資料封包時,恐怕資料外洩是勢必難避免的。

那麼,我們所安裝的 PostgreSQL 在網路上傳遞資料的安全性是如何呢?如果是預設安裝,那麼很抱歉,在 FreeBSD 上的 PostgreSQL port 是極不安全的,連密碼都是以明碼的方式在網路上傳遞的。很不幸的,Windows 版本也是。Ubuntu 比較好,預設已把 SSL 支援加上,但是它也有缺點,缺點和 Debian 一樣,改版的速度太過緩慢,慢到會讓人抓狂,尤其是安全性更新。

PostgreSQL 在 FreeBSD 上的大版本升級

唉!升級...升級...升級...這一陣子一直升級,這次輪到 PostgreSQL 大升級。PostgreSQL 不像其它軟體,即使是 8.2 升級到 8.3,也必須大改,所以無法直接用 upgrade 工具直接升。即使是 Windows 版本,也必須勞心費力一番。這次我用 FreeBSD 版本的升級做為例子,來說明最簡單也是最正確的大改版升級步驟。

首先,請先把原本資料庫的資料完全備份下來。如果你是 Windows 的使用者或是 Linux 的使用者,你可以考慮使用 pgAdmin III 的「工具」選單中的「備份」或「備份全域」來做,這樣簡單很多,但是由於 pgAdmin III 的說明太少,我實在看不懂「備份」對話方塊中選項的含意,所以乾脆不用。最正式的方法是使用在 console 下的工具:pg_dump 和 pg_dumpall。兩者的差別在於,前者可以針對某個特定的 database 做備份,而後者一般用來把整個伺服器資料做完整的備份。我建議直接使用 pg_dumpall 比較方便和快速。

利用網路上的範例資料庫來做 SQL 練習

我最早接觸的資料庫工具是 dBase II,那是 1984 年的事情了。但是那時候還在念台北工專,完全沒有資料庫的概念,也不知道這東西有什麼用途,可以用在什麼地方。後來等我出了社會我才知道,事實上我那時一直把它當做試算表來用。後來 dBase III 甚至 Plus 出來,我就沒再碰它了。而且那時 dBase 對 SQL 完全沒支援,由於它的巨集設計得不錯,所以不只是我,我看整個台灣市面根本也把它當成「可以搜尋資料的試算表」來用。一直到了 1994 年我在教高中時,我才因為認識那時識華彩的總經理賴毓敏,在他的介紹下我接觸到 Microsoft Access,這時才讓我真正了解,什麼是資料庫。賴毓敏那時對 Access 相當著迷,雖然當時 Access 只有英文版本,他還是逢人就介紹,甚至用 Access 接專案。不過,在那個 Windows 3.1 的時代,這麼一個小巧的檔案型資料庫,居然可以做到這樣的功能,現在想想,真的很令我驚訝。誰說微軟的原創性不佳?這個產品和 Excel 一直是我認為微軟設計得最棒的兩項產品。

所以我學資料庫的方法和目前很多技術學院的學生的途徑很像,只是我在第二年又碰到一個更新鮮的玩意兒 ─ Microsoft SQL Server 6.5。

PostgreSQL 的 Server instrumentation 功能

PostgreSQL 雖然有 pgAdmin III 這個極好用的管理工具,但是 pgAdmin 還是有一些資訊,必須由伺服器本身提供。但是,PostgreSQL server 原本並沒有主動提供這些「系統」資訊到管理界面的功能,所以,就必須再加裝一些擴充模組,讓伺服器擁有提供這些資訊的能力。這個擴充模組叫做 adminpack contrib module,它提供了一些和 pgAdmin 相互交換資訊的功能:

  • 在 pgAdmin 主視窗的「統計情報」頁籤(Statistics tab)中顯示「表空間」(tablespaces) 、資料庫(databases)、資料表(tables)和索引(Indexes)在硬碟裏所占的尺寸大小。
  • 如果伺服器的日誌檔(log files)設定一切很適當的話,在「伺服器狀態」對話方塊(The Server Status dialogue,可以由主功能表的「工具」→「伺服器狀態」叫出)裏會出現「日誌檔」頁籤,而且在這個頁籤可以瀏覽伺服器的日誌檔內容。
訂閱文章